以下の内容がありますMakefile
。
aaa:bbb
echo 456
bbb:
echo 123
bbb
ディレクトリにファイルがない場合、ファイルaaa
の有無にかかわらず、これら2つのルールが実行されます。
しかし、なぜ?
答え1
aaa
あなたは状況によって異なると言いましたbbb
。これは、作成または更新するために目標を設定する必要があることを意味しaaa
ますbbb
。
とaaa
がbbb
現在のディレクトリにファイルとして存在し、aaa
それよりも最新の場合は、bbb
両方のターゲットを再構築する必要はありませんが、aaa
比較すると使用されなくなります。bbb
またはbbb
欠落している場合その後aaa
、最新であることを確認するためにビルドする必要があります(bbb
失われた場合は再構築する必要がありますbbb
)。
次の例では、2つのターゲットが実際に作る関連ファイルがある場合、ターゲットは2番目の呼び出しで構築されませんmake
。ファイルが削除されると、bbb
両方のターゲットが再構築されます。
$ cat Makefile
aaa: bbb
echo 456
touch aaa
bbb:
echo 123
touch bbb
$ rm -f aaa bbb
$ make
echo 123
123
touch bbb
echo 456
456
touch aaa
$ make
`aaa' is up to date.
$ rm bbb
$ make
echo 123
123
touch bbb
echo 456
456
touch aaa