🔨
Makefile の内部マクロメモ書き
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
Discussion