如果在文件a中找不到指定的目标,我一直试图获取一个makefile,a,包含另一个makefile,b。我正在使用this代码段来尝试实现此目的,但是从我已经放入文件的echos中我可以看到,即使在a和run中找到目标,也会访问makefile b。
我在上面的链接中使用的代码段是:
foo:
frobnicate > foo
%: force
@echo "No target found locally, running default makefile"
@$(MAKE) -f Makefile $@
force: ;
特别是我得到了#34;什么都做不到"正在使用makefile b时的输出,并且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",当它应该是尝试构建的目标时。
答案 0 :(得分:0)
根据你给出的例子,我真的不明白你的问题;在该示例中没有“a”或“b”,只有一个Makefile
。
但是,您所看到的行为是由GNU make re-making makefiles功能引起的。当您创建匹配任何模式规则时,您必须考虑到要构建的每个目标或先决条件都将匹配该规则。这是一个很大的负担。
您可以通过为它们创建明确的规则来避免重新制作makefile,例如:
Makefile: ;