以下是我目前对我的问题的“解决方案”。我认为当在另一个目录中找不到依赖项的规则时,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 $@)
我确实有一个通用表格,可以用来避免为每个“外部”文件重复第二条规则,但正如我所说,我认为这都是不必要的。
define REMOTE
$(1): FORCE
$$(MAKE) -C $$(dir $$@) $$(notdir $$@)
endef
$(eval $(call REMOTE,../a/generated.h))
$(eval $(call REMOTE,../a/anotherGeneratedFile.h))