次のメイクファイルを検討してください。
foo :
mkdir foo
foo/a.out : foo a.in
cp a.in foo/a.out
foo/b.out : foo b.in
cp b.in foo/b.out
a.in
そして、ファイルのみを含むディレクトリから開始して、それと次の対話を行いb.in
ます。
$ make foo/a.out
mkdir foo
cp a.in foo/a.out
ここまでは順調ですね。
$ make foo/b.out
cp b.in foo/b.out
まだ良いですが、今:
$ make foo/a.out # a.out should be up to date now!
cp a.in foo/a.out
a.out
前提条件がまったく変更されていない場合でも、ターゲットを再構築します。
が作成されるfoo/b.out
と、ディレクトリの最終変更時刻foo
が更新されるため、「変更」されたものとして取得されるようです。
これを回避する方法はありますか?たとえば、存在する必要があるという点だけにfoo/a.out
依存していることを宣言する方法はありますか?内部でファイルを作成しても、時代遅れと見なされることはありませんか?foo
foo
foo
foo