Makefile の内部マクロメモ書き

2 min読了の目安(約1800字TECH技術記事

MakeFile のメモ書き。よく $< とか $@ の内部マクロ/自動変数を忘れるので。

マクロ 説明
$@ ターゲット名
$% ターゲットメンバ名。アーカイブファイルの更新等で使用する
$< 依存ファイルの先頭のファイル名。
$? ターゲットより新しい 依存ファイルのそれぞれのファイル名の間に、スペースをはさんで並べたもの
$^ 全ての 依存ファイルのそれぞれのファイル名の間に、スペースをはさんで並べたもの。
$+ わからん。 $^ との違いは Makefile に記述した順番に並んでいるかどうからしい。
$* 暗黙のルールで一致した語幹。 a.%.b で一致したのが baa/a.do.b の時は baa/do になる。 %.c とかで使うのがメインっぽい。

確認

実際にどんな値がどこにあるのかイマイチ把握していないので、確認のための Makefileを作り実行して結果を見る。


hage_1 :
	-echo '$@ is ' $@
	-echo '$% is ' $%
	-echo '$< is ' $<
	-echo '$? is ' $?
	-echo '$^ is ' $^
	-echo '$+ is ' $+

hage_2 : hage1
	-echo '$@ is ' $@
	-echo '$% is ' $%
	-echo '$< is ' $<
	-echo '$? is ' $?
	-echo '$^ is ' $^
	-echo '$+ is ' $+


hage_3 : hage3 hage2 hage1
	-echo '$@ is ' $@
	-echo '$% is ' $%
	-echo '$< is ' $<
	-echo '$? is ' $?
	-echo '$^ is ' $^
	-echo '$+ is ' $+

結果

 ⚓  ~/t/MM  touch hage{1,2,3}
 ⚓  ~/t/MM  make hage_1
echo '$@ is ' hage_1
$@ is  hage_1
echo '$% is ' 
$% is 
echo '$< is '< is 
echo '$? is ' 
$? is 
echo '$^ is ' 
$^ is 
echo '$+ is ' 
$+ is 
 ⚓  ~/t/MM  make hage_2
echo '$@ is ' hage_2
$@ is  hage_2
echo '$% is ' 
$% is 
echo '$< is ' hage1
$< is  hage1
echo '$? is ' hage1
$? is  hage1
echo '$^ is ' hage1
$^ is  hage1
echo '$+ is ' hage1
$+ is  hage1
 ⚓  ~/t/MM  make hage_3
echo '$@ is ' hage_3
$@ is  hage_3
echo '$% is ' 
$% is 
echo '$< is ' hage3
$< is  hage3
echo '$? is ' hage3 hage2 hage1
$? is  hage3 hage2 hage1
echo '$^ is ' hage3 hage2 hage1
$^ is  hage3 hage2 hage1
echo '$+ is ' hage3 hage2 hage1
$+ is  hage3 hage2 hage1

参考