从另一个Makefile获取依赖项

从另一个Makefile获取依赖项,makefile,Makefile,我尝试使用多个makefile,如下所示: 在~/generator/Makefile中: foo.xml: foo-part1.xml foo-part2.xml foo-part3.xml ./generate $^ > $@ foo.xml: $(MAKE) -C ~/generator $@ mv ~/generator/$@ $@ .PHONY: ~/generator/foo.xml ~/generator/foo.xml: $(MAKE)

我尝试使用多个makefile,如下所示:

~/generator/Makefile
中:

foo.xml: foo-part1.xml foo-part2.xml foo-part3.xml
    ./generate $^ > $@
foo.xml:
    $(MAKE) -C ~/generator $@
    mv ~/generator/$@ $@
.PHONY: ~/generator/foo.xml
~/generator/foo.xml:
    $(MAKE) -C ~/generator $(notdir $@)

foo.xml: ~/generator/foo.xml
    cp $< $@
~/some/other/dir/Makefile
中:

foo.xml: foo-part1.xml foo-part2.xml foo-part3.xml
    ./generate $^ > $@
foo.xml:
    $(MAKE) -C ~/generator $@
    mv ~/generator/$@ $@
.PHONY: ~/generator/foo.xml
~/generator/foo.xml:
    $(MAKE) -C ~/generator $(notdir $@)

foo.xml: ~/generator/foo.xml
    cp $< $@
问题是:当我转到
~/some/other/dir/
并运行
make foo.xml
时,
foo.xml
没有依赖项列表,并且即使(例如)
~/generator/foo-part1.xml
比目标更新,也不会调用
make-C~/generator foo.xml

我想到的唯一解决方案是将具有绝对路径的依赖项列表复制到
~/some/other/dir/Makefile
,这非常糟糕:

foo.xml: ~/generator/foo-part1.xml ~/generator/foo-part2.xml ~/generator/foo-part3.xml

然后,我的问题是:在一个makefile中是否有一种方法可以询问另一个makefile目标的依赖关系是什么?或者将请求
foo.xml
转发到该makefile并收集结果?我基本上希望第二个makefile在决定是否重建目标以及构建目标时依赖第一个makefile。

我通过在第二个makefile中使用两条规则来解决这个问题:

~/some/other/dir/Makefile
中:

foo.xml: foo-part1.xml foo-part2.xml foo-part3.xml
    ./generate $^ > $@
foo.xml:
    $(MAKE) -C ~/generator $@
    mv ~/generator/$@ $@
.PHONY: ~/generator/foo.xml
~/generator/foo.xml:
    $(MAKE) -C ~/generator $(notdir $@)

foo.xml: ~/generator/foo.xml
    cp $< $@
.PHONY:~/generator/foo.xml
~/generator/foo.xml:
$(MAKE)-C~/generator$(notdir$@)
foo.xml:~/generator/foo.xml
cp$<$@

这类问题就是为什么要写这篇论文(pdf链接)。你可以从另一个makefile中包含一个makefile,然后让你的第二个目标依赖于第一个makefile(只要两个makefile中没有冲突的目标/变量)。目前还不清楚你现有的解决方案是否正是你想要的。您说您希望两个makefiles中的依赖项相同,但是您说您希望第一个makefile决定是否重建目标,这是您已经拥有的。@Beta抱歉,如果我不清楚,我已经拥有的是带有绝对路径的依赖项列表的副本/粘贴。我想告诉第二个makefile“向这个makefile询问这个目标的依赖项”,或者更好的是,“告诉这个makefile根据它的依赖项构建这个目标”(而不必将依赖项列表复制/粘贴到第二个makefile中)。第二个makefile需要依赖项列表做什么?它可以在不知道它们的情况下调用
$(MAKE)-C~/generator$@
,生成的子MAKE将读取第一个makefile并决定是否重建
~/generator/foo.xml
。第二个makefile对依赖项列表还有其他用途吗?我不会抱怨否决票,我知道这个问题和答案远非典范,但你能给我一些反馈,让我改进我未来的问题和答案吗?