🦁

Makefile: 自動変数

2020/09/22に公開

$@

ターゲット名

$%

ライブラリの構成指定中の要素
イミフ

$<

最初の必須項目名

$?

ターゲットよりも後で更新された必須項目の全てを、スペース区切りでリストに展開

$^

すべての必須項目をスペース区切りでリストに展開。重複したファイルはリストから取り除かれる。

$+

$^と同様だが、重複を含む。リンカ指定などには重複した値に意味があるので使い分ける。

$*

ターゲット名の一部を展開。パターンルールで使用するべきで、サフィックスを除いたターゲット名で展開されるのが一般的。

拡張形

ディレクトリ部分を展開

$(@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