次のようなルールを作成したいと思います。
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