从另一个Makefile获取依赖项
我尝试使用多个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)
~/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对依赖项列表还有其他用途吗?我不会抱怨否决票,我知道这个问题和答案远非典范,但你能给我一些反馈,让我改进我未来的问题和答案吗?