GNU Make の「中間ファイル」機能を使用します。
中間ファイルは、他のすべてのファイルと同様に、ルールを使用して再作成されます。ただし、中間ファイルの扱いは 2 つの点で異なります。
最初の違いは、中間ファイルが存在しない場合に何が起こるかです。通常のファイル b が存在せず、make が b に依存するターゲットを考慮する場合、必ず b を作成し、b からターゲットを更新します。しかし、b が中間ファイルの場合、make はそのままにしておくことができます。b の何らかの前提条件がそのターゲットよりも新しいか、そのターゲットを更新する他の理由がない限り、b または最終ターゲットを更新する必要はありません。
2 番目の違いは、何かを更新するために make が b を作成した場合、必要がなくなった後で b を削除することです。したがって、make前に存在しなかった中間ファイルは、make後も存在しません。rm -f
make は、どのファイルを削除しているかを示すコマンドを出力して、削除を報告します。
通常、ファイルがターゲットまたは前提条件として makefile に記述されている場合、そのファイルは中間ファイルにはなりません。ただし、ファイルを特別なターゲットの前提条件としてリストすることにより、ファイルを明示的に中間としてマークすることができます.INTERMEDIATE
。これは、ファイルが他の方法で明示的に言及されている場合でも有効です。
中間ファイルを 2 次ファイルとしてマークすることにより、中間ファイルの自動削除を防ぐことができます。これを行うには、それを特別なターゲットの前提条件としてリストし.SECONDARY
ます。ファイルがセカンダリの場合、ファイルがまだ存在しないという理由だけで make はファイルを作成しませんが、make はファイルを自動的に削除しません。ファイルをセカンダリとしてマークすると、中間としてもマークされます。
したがって、次の行を Makefile に追加するだけで十分です。
.INTERMEDIATE : hugefileB hugefileC
初めて make を呼び出す:
$ make
touch hugefileB
touch hugefileC
cat hugefileB hugefileC > digestA
rm hugefileB hugefileC
そして次回:
$ make
make: `digestA' is up to date.