以下は、私の問題に対する現在の「解決策」です。別のディレクトリの依存関係のルールが見つからない場合、make はこれを自動的に行うはずだと思っていましたが、なぜそう思ったのかわかりません。もっと良い方法を知っていますか?
../a/
作成する Makefile がある別のディレクトリがあります../a/generated.h
。
.PHONY: FORCE
FORCE:
my.c: ../a/generated.h
cp --preserve=timestamps $< $@
../a/generated.h: FORCE
$(MAKE) -C $(dir $@) $(notdir $@)
「外部」ファイルごとに 2 番目の規則が重複しないようにするために使用できる一般的な形式がありますが、前述のとおり、これはすべて不必要だと思いました。
define REMOTE
$(1): FORCE
$$(MAKE) -C $$(dir $$@) $$(notdir $$@)
endef
$(eval $(call REMOTE,../a/generated.h))
$(eval $(call REMOTE,../a/anotherGeneratedFile.h))