次のようなルールを作成したいと思います。
foo.out: (out of date if foo.in is newer than foo.out.stamp)
# update foo.out if and only if the new foo.out has different contents
# than the old foo.out (a change to foo.in may or may not change foo.out)
&& touch foo.out.stamp
私はこれを行うことはできません:
foo.out.stamp: foo.in
# update foo.out if and only if the new foo.out has different contents
# than the old foo.out (a change to foo.in may or may not change foo.out)
&& touch foo.out.stamp
foo.out: foo.out.stamp
foo.in変更されたが、のレシピfoo.out.stampは変更されない場合、foo.outはmake常に古いものとして表示foo.outされるためです。
この種のルールを書く方法はありますか?
編集:私が無条件に触れない理由の説明foo.out:
私はヴァラと仕事をしています。Valaのコンパイルプロセスは次のようになります。
- ファイルごと
.valaに、ファイルを生成し.vapiます(ヘッダーファイルと同様)。 - ファイルごと
.valaに、ファイルを生成し.cます(これには、個々の.valaファイルとすべて.vapiのファイルをコンパイラーに渡す必要があります) - 通常のプロセスを続行し
.c -> .o -> executable/libraryます。
手順1と2の場合、Valaコンパイラは/ファイルの内容が変更された場合にのみ.vapi/ファイルを更新します。.cこれは、不必要な.c -> .o再コンパイルを防ぐためです。
makefileの用語で:
- Valaコンパイラが最後にファイルを再生成してから(ファイルが最後に変更されたときではなく)ファイルが変更された
.vapi場合、ファイルは古くなっています。.vala.vapi.vapi - Valaコンパイラが最後にファイルを再生成してから(またはファイルが最後に変更されたときではなく)ファイルが変更された
.c場合、ファイルは古くなっています。.vala.vapi.c.c