🦁
Makefile: 自動変数
$@
ターゲット名
$%
ライブラリの構成指定中の要素
イミフ
$<
最初の必須項目名
$?
ターゲットよりも後で更新された必須項目の全てを、スペース区切りでリストに展開
$^
すべての必須項目をスペース区切りでリストに展開。重複したファイルはリストから取り除かれる。
$+
$^と同様だが、重複を含む。リンカ指定などには重複した値に意味があるので使い分ける。
$*
ターゲット名の一部を展開。パターンルールで使用するべきで、サフィックスを除いたターゲット名で展開されるのが一般的。
拡張形
ディレクトリ部分を展開
$(@D), $(<D) と言った感じ
ファイル部分を展開
$(@F), $(<F) と言った感じ
例
count_words: main.o counter.o lexer.o -lfl
gcc $^ -o $@
main.o: main.c
gcc -c $<
counter.o: counter.c
gcc -c $<
lexer.o: lexer.c
gcc -c $<
lexer.c: lexer.l
flex -t $< > $@
Discussion