【Linux】Makefileの簡単な紹介

目次

序文:

1. メイクファイルのルール

次に、Makefile の関数構文

(1) ワイルドカードパターン

(2) クリーンに削除

(3) 即時変数、遅延変数

(4) Makefileの共通機能


3-1. Makefile_哔哩哔哩_bilibiliによって得られる効果 3-2. Makefile_哔哩哔哩_bilibiliの導入とルール

3-3.Makefile_哔哩哔哩_bilibiliの文法

序文:

学習の過程では、Makefile の役割を認識し、その基本的な文法と規則を理解し、一般的な Makefile を理解して使用できるようになれば、実際のプロジェクトでの作業負荷を軽減できます。

(1) gcc コマンドを使用して複数の .c ファイルをコンパイルする場合、以下を例に挙げます。ac と bc を順番にコンパイルする必要があります。その中のファイルが変更されている場合は、すべてのファイルを再度コンパイルする必要があります。は不要です。

 (2) 上記の方法は、大きなプログラムを扱う場合には非常に不便です。ソース ファイルまたはヘッダー ファイルを変更する場合、関連するファイルを再コンパイルしてからアプリケーションを再生成します。これは、より効率的なコンパイル方法です。

(3) 上記の方法を使用すると、make コマンドは Linux でプログラムをコンパイルするためによく使用されますが、make コマンドによって実行される動作は MakeFile ファイルに依存します。

(4) Makefile の基本原理: 対象ファイルと依存ファイルの変更時刻を比較し、変更の有無を判定し、依存ファイルの方が新しい場合に対応するアクションを実行します。 

(5) 既存の一般的な Makefile の役割:

  • ①複数ディレクトリ、多層ディレクトリ、複数ファイルをサポート
  • ②全ファイルのコンパイルオプション設定に対応
  • ③特定のディレクトリに対するコンパイルオプションの設定をサポート
  • ④ファイルごとにコンパイルオプションを設定できるようにしました

1. メイクファイルのルール

make コマンドを実行すると、現在のディレクトリで Makefile を検索し、その指示に従って操作を実行して最初のターゲットを生成します。

単純な Makefile ルールは次のようになります。

ターゲット (ターゲット) ... : 依存関係 (前提条件) ...
<tab> コマンド (コマンド)
「依存関係ファイル」が「対象ファイル」より新しい場合、または対象ファイルが存在しない場合は、「コマンド」を実行して「対象ファイル」を再生成します。
具体的な例としては以下のようなものがあります。
ac ファイルを変更する場合は、ac を再コンパイルし、再リンクして、対応するプログラムを生成します。

次に、Makefile の関数構文

(1) ワイルドカードパターン

ワイルドカード (パターン): 同様のルールを合理化します。

$@: ターゲットを示します $<: 最初の依存ファイルを示します $^: すべての依存ファイルを示します

テスト: ao bo co
        gcc -o test $^

%.o : %.c
        gcc -c -o $@ $<

(2)削除クリーン

対象のファイルを削除する場合に使用します。

 クリーン:
        rm *.o テスト

.PHONY: クリーン

(3) 即時変数、遅延変数

A = xxx //遅延変数、使用時に決定されます

B ?= xxx // 遅延変数。割り当ては初めて定義された場合にのみ成功します。すでに定義されている場合、この割り当ては無効です
C := xxx // 定義時に決定される即時変数
D += yyy // D が以前遅延変数だった 場合、現在も遅延変数のままです。

 上記の変数について、小さなテストを実行します。

上記の説明によれば、A、B、C の対応する出力結果は次のようになります。

(4) Makefileの共通機能

//リスト内の各要素を var に代入し、var をテキストで記述された形式に変更します
$( foreach var,list,text)
//パターンにリストされているファイルが存在するかどうかに関係なく、既存のファイルをすべてリストします
$( ワイルドカード パターン)
// テキスト中のパターン形式に適合する(適合しない)値を取り出す
$( フィルター パターン...,テキスト)
$( フィルターアウト パターン...,テキスト)
//パターン形式に一致するテキスト内の単語を検索し、置換で置き換えます。
$( patsubst パターン,置換,テキスト)

上記の関数は小さなテスト アプリケーションを作成します。

対応する結果:

おすすめ

転載: blog.csdn.net/weixin_42373086/article/details/129889583