Makefileメモ:リファレンス編

自分が参照したいものを上の方にして列挙.

マクロ

$

「影響を与える側のファイル名」


すでに

HOGE.obj: HOGE.cpp

という風に「依存関係」が書かれていて,

.cpp.obj:
	gcc -c $<

という風に「CPPの影響でOBJを生成する場合,"gcc -c $<"を実行する」ということが書かれている場合,「$<」は「HOGE.cpp」に展開される.

$*

「拡張子を除いた名前」

.cpp.obj:
	gcc -o $*.obj -c $<

という風に,「前述のやつ」+「-o $*.obj」で書くと,「HOGE.cpp」から拡張子を除いたもの,つまり「HOGE」が「$*」の部分に展開される.
今みたいに「階層」を作って色んな場所にCPPファイルを作成しているときに,「CPPがあるディレクトリ」に「対応OBJ」を生成する場合に使用する.(「$*」によってディレクトリ名まで展開されるらしい)

一般的な書き方

他のMakefileで良く使われる手法.「書くとき」というより「読むとき」用のリファレンス.

コンパイラ指定

「どのコンパイラを使うか」の指定.他のコンパイラへの変更を容易にするため分離.


「CC」などの名前(「C Compiler」とか「Compiler Collection」とかの短縮?)で使用.

オプション指定

共通オプション.ぶっちゃけ,良くわかってない.ウィンドウを出すタイプか,とかいろいろ指定.


「OPT」「OPTS」などの名前(たぶん「OPTIONS」の短縮)で使用.

インクルードパス指定

「ヘッダファイルはどこにあるか」を指定.色んなライブラリを使う場合,それに対応するヘッダファイルのパスをここで指定.


「INC」「INDS」などの名前(たぶん「INCLUDES」の短縮)で使用.

ライブラリパス指定

「ライブラリはどこにあるか」を指定.色んなライブラリを使う場合,それらのライブラリのパスをここで指定.


「LIB」「LIBS」などの名前(たぶん「LIBRARIES」の短縮)で使用.

ターゲット指定

最終的に生成されるもの.「〜.exe」とか「a.out」とか.


「TARGET」などの名前で使用.

ヘッダファイル用マクロ

全てのヘッダファイル.使ってるのを見かけない.普通は「CPP→関連ヘッダ」なので,使う意味がないのかもしれない.


「HEADER」「HED」などの名前で使用.

ソースファイル用マクロ

全てのソース(ここではCPP)ファイル.「依存関係の計算」に利用したり,「オブジェクトファイルの名前を求める」のに使われたりする模様.


SRC」「SOURCE」などの名前で使用.

オブジェクトファイル用マクロ

全てのオブジェクトファイル(OとかOBJとか).上のソース用マクロから「OBJ=$(SRC:.cc=.o)」とか「OBJ = $(SRC:%.c=%.o)」で,拡張子を変更することで求めるのが一般的っぽい.オブジェクトファイルが一つでも変われば,exeファイルも更新が必要になるので,ターゲットの依存部分として指定されることが多い.


「OBJ」「OBJS」などの名前で使用.