Makefileで中間ファイルを正しく使用する方法は?

Makefileで中間ファイルを正しく使用する方法は?

次のシナリオを考えてみましょう。

tempfile: bar
    generate tempfile (using bar)

foo: tempfile
    generate foo (using bar)

問題は次のとおりです。をfoo使用して作成されますtempfiletempfileはビルド専用ですfoo。また、から取得した一部のデータ(一時ファイルではない)がtempfile含まれているため、変更されるたびに一時ファイルも変更され、影響を受けます。barbarfoo

今、実行時には変更されたときにのみビルドしたいとmake foo思います。実際に起こるのは、Makeが一時ファイル(自分自身は関係ありません)を削除し、何も変更されていなくても毎回fooを構築することです。foobarbar

どんな提案がありますか?

ベストアンサー1

fooこれが必要な場合は、前提条件をbar削除できます。tempfile

foo: bar
        generate foo (using bar)

foo必要に応じて(GNU)Makeにアーカイブtempfileし、中間ファイルとしてのみ使用するようにtempfile依頼できます。貴重なものとしてマーク:

.PRECIOUS: tempfile

tempfile: bar
        generate tempfile

foo: tempfile
        generate foo

必要に応じて別の可能性は、それを別のターゲットtempfileとして扱わないことです。tempfile

foo: bar
        generate tempfile
        generate bar

おすすめ記事