使用Make with force snippet覆盖其他文件

时间:2015-06-16 09:36:39

标签: makefile

如果在文件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",当它应该是尝试构建的目标时。

1 个答案:

答案 0 :(得分:0)

根据你给出的例子,我真的不明白你的问题;在该示例中没有“a”或“b”,只有一个Makefile

但是,您所看到的行为是由GNU make re-making makefiles功能引起的。当您创建匹配任何模式规则时,您必须考虑到要构建的每个目标或先决条件都将匹配该规则。这是一个很大的负担。

您可以通过为它们创建明确的规则来避免重新制作makefile,例如:

Makefile: ;