次のメイクファイルを検討してください。
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依存していることを宣言する方法はありますか?内部でファイルを作成しても、時代遅れと見なされることはありませんか?foofoofoofoo