現在のディレクトリに必要なコンポーネントがないため、Makefileルールが実行され続けるのはなぜですか?

現在のディレクトリに必要なコンポーネントがないため、Makefileルールが実行され続けるのはなぜですか?

以下の内容がありますMakefile

aaa:bbb
    echo 456
bbb:
    echo 123

bbbディレクトリにファイルがない場合、ファイルaaaの有無にかかわらず、これら2つのルールが実行されます。

しかし、なぜ?

ベストアンサー1

aaaあなたは状況によって異なると言いましたbbb。これは、作成または更新するために目標を設定する必要があることを意味しaaaますbbb

aaabbb現在のディレクトリにファイルとして存在し、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

おすすめ記事