2011-03-24 7 views

答えて

5

a.txtは、の暗黙のルールのチェーン(この場合、自分で定義した暗黙的なルール)によって作成されます。そのため、Makeはfoo.logintermediate fileとみなし、その目的を果たしたときに削除します。あなたは二次ターゲットをfoo.log宣言することでこの動作をオーバーライドすることができます:デフォルトでは

.SECONDARY: foo.log 
+1

.SECONDARY:%.log#does not work、ルールを一般化するにはどうすればよいですか? –

+5

すべての中間体を残したい場合は、依存関係のない.SECONDARY:のターゲットを宣言してください。また、.PRECIOUSでワイルドカードを使用することもできます。つまり、.PRECIOUS:%.log – Sean

+1

@Sean:ワイルドカードはPRECIOUSでは動作しますが、SECONDARYでは動作しないというのは奇妙です... – Beta

22

は、GNU makeが中間ファイルを削除します。 %.txtは%.logに依存するため、makeは.logファイルを削除します。その動作を防止するには、.PRECIOUSまたは.SECONDARYを使用して貴重なマークを付けます。

.PRECIOUS: foo.log 

また、依存関係のない.SECONDARYを使用して中間ファイルを削除しないようにすることもできます。

.SECONDARY: 

GNU makeマニュアルのthisセクションを参照してください。