いくつかの複雑な依存関係を解決するエレガントな方法を見つけようとしています。Makefile に次のようなものがあります。
.PHONY: FOO
FOO: foo
foo:
build foo
.PHONY: BAR
BAR: bar
bar: FOO
build bar
ここでの考え方は、実際のファイル (foo、bar) を偽のターゲット (FOO BAR) で抽象化したいということです。もちろん、実際の Makefile ではもっと複雑なので、抽象化が重要です。ただし、ここでの問題は、偽のターゲット FOO を bar の依存関係にすることです。その場合、たとえ foo と bar の両方が最新であっても、Make は常に bar を再構築しようとします。これは明らかに、常に FOO が古いものとして扱われるためです。しかし、この動作は実際には正しくありません。
したがって、3 つのオプションしかないようです。1) bar を foo に直接依存させる。私の実際の Makefile では、より複雑であり、実際のファイルを依存関係として指定しようとすることは非常に望ましくありません。2) すべての偽物に加えて変数を使用します。これにより、Makefile 全体がより複雑になります。3) bar から依存関係として foo/Foo を削除し、bar の規則の一部として FOO の再帰的な make を追加します。これは非常に悪いフォームです。
私が気付いていない、よりエレガントなソリューションはありますか?
ありがとう。