前提条件を使用して(ただしレシピを使用せずに)暗黙のルールを作成した場合、依存関係は尊重されていないようです。一方、レシピを定義するブロックで前提条件を定義する場合、またはターゲットの特定のインスタンスの依存関係を指定する場合、それは機能しているように見えます。私は次のMakefileを持っています(GNU make 3.81)
all: foo.a foo.b bar.b bar.c
dep1:
@echo "running $@"
%.a: dep1
%.a:
@echo "running $@ (depends on: $^)"
bar.b: dep1
%.b: dep1
@echo "running $@ (depends on: $^)"
bar.c: dep1
bar.c:
@echo "running $@ (depends on: $^)"
makeを実行すると、次のようになります。
~/tmp/tmp5> make
running foo.a (depends on: )
running dep1
running foo.b (depends on: dep1)
running bar.b (depends on: dep1)
running bar.c (depends on: dep1)
%.a
に依存しているのにdep1
、foo.a
構築せずに構築できるようdep1
です。これはmakeのバグですか、それともこの動作の理由がありますか?
ありがとう、
ジョン