Makefileでよく使われる記号

3021 ワード

1環境変数
1.1コンパイラ
CC   // C     ,    gcc
CXX  // C++     ,    g++

説明:これはデフォルトの変数で、ユーザーがカスタマイズする必要はありません(ただし、ユーザーはCC=arm-linux-gccなどの値を変更して、クロスコンパイルに使用できます).
1.2コンパイラパラメータ
CFLAGS   // C          
LDFLAGS  // C          
CXXFLAGS // C++          

2自動変数
$@は、ルール内のターゲットファイル名を表します.ターゲットがドキュメント(Linuxでは、一般的に.aファイルをドキュメントと呼ぶ)の場合、このドキュメントのファイル名を表します.マルチターゲットのモード・ルールでは、どのトリガ・ルールが実行されるターゲット・ファイル名を表します.$%ルールのターゲット・ファイルが静的ライブラリ・ファイルである場合、静的ライブラリのメンバー名を表します.たとえば、ルールのターゲットが「foo.a(bar.o)」である場合、「$%」の値は「bar.o」であり、「$@」の値は「foo.a」である.ターゲットが関数ライブラリファイルでない場合、その値は空です.$<ルールの最初の依存ファイル名.暗黙的なルールの場合、ターゲットによって指定された最初の依存ファイルを表します.$?ターゲットファイルより更新されたすべての依存ファイルのリスト、スペース分割.ターゲットが静的ライブラリファイル名の場合、ライブラリメンバー(.oファイル)の更新状況を表します.$^ルールのすべての依存ファイルのリストは、スペースで区切られます.ターゲットが静的ライブラリファイル名の場合、すべてのライブラリメンバー(.oファイル)名のみを表すことができます.1つのファイルはターゲットの依存に繰り返し表示され、変数「$^」は1回の参照のみを記録します.つまり、変数「$^」は重複する依存ファイルを削除します.$+「$^」と似ていますが、依存ファイルに重複するファイルが保持されます.主にプログラムリンク時、ライブラリのクロスリファレンスの場合に使用されます.$(@D)は、ターゲットファイルのディレクトリ部分(ディレクトリ部分の最後のスラッシュを除く)を表します.「$@」が「dir/foo.o」の場合、「$(@D)」の値は「dir」になります.「$@」にスラッシュが存在しない場合、その値は「.」です.(現在のディレクトリ).関数「dir」との違いに注意してください!$(@F)ターゲットファイルのフルファイル名のうち、ディレクトリ以外の部分(実際のファイル名)です.「$@」が「dir/foo.o」の場合、「$(@F)」は「foo.o」にすぎません.「$(@F)」は、関数「$(notdir$@)」に等価です.$(%D)$(%F)は、「archive(member)」のような静的ライブラリをターゲットとする場合、ライブラリファイルメンバーの「member」名のディレクトリ部分とファイル名部分をそれぞれ表す.この形式のルールターゲットにのみ有効です.$(参考資料
[1]MakeFileでの変数定義