如果在文件a中找不到指定的目标,我一直在尝试获取生成文件a,以包含另一个生成文件b。我使用this代码片段来尝试实现这一点,但从我放入文件中的回显中,我可以看到,即使在a中找到目标并运行,也可以访问生成文件b。
我在上面的链接中使用的代码片段是:
foo:
frobnicate > foo
%: force
@echo "No target found locally, running default makefile"
@$(MAKE) -f Makefile $@
force: ;具体地说,当使用makefile b时,我会得到"Nothing to be to“输出,而makefile a的行为符合预期。如下所示:
$ make all # all target appears in both make files
No target found locally, running default makefile
make[1]: Entering directory `/home/user/currdir' # (b)
make[1]: Nothing to be done for `Makefile'.
make[1]: Leaving directory `/home/user/currdir'
Local all # (a)有没有更好的方法来做到这一点?
添加:在向%规则添加了另一个回应后,我发现$@是"Makefile",而它应该是尝试构建的目标。
发布于 2015-06-16 19:41:08
根据您给出的示例,我不能真正理解您的问题;该示例中没有"a“或"b”,只有一个Makefile。
但是,您看到的行为是由于GNU make的re-making makefiles功能造成的。当您创建match-anything模式规则时,您必须考虑make想要构建的每个单独的目标或先决条件都将匹配该规则。这是一个很大的负担。
您可以通过为其创建显式规则来避免重新生成的makefile匹配,例如:
Makefile: ;https://stackoverflow.com/questions/30863872
复制相似问题