在隐式规则更新后,重新构建共同目标

时间:2015-08-26 06:13:20

标签: makefile gnu-make

来自docs

  

模式规则可能有多个目标。与普通规则不同,   这并不像具有相同先决条件的许多不同规则那样   和食谱。如果模式规则有多个目标,make就知道了   规则的配方负责制定所有目标。该   配方只执行一次以制作所有目标。搜索时   对于匹配目标的模式规则,规则的目标模式   除了匹配需要规则的目标的那个之外   偶然的:make只担心提供食谱和先决条件   到目前有问题的文件。但是,当这个文件的配方是   运行时,其他目标被标记为已自行更新。



现在,给定一个makefile,例如:

# A rule without a recipe. Make will look for an implicit-rule, in-order to build this target.
all :

# An implicit-rule to match the target 'all'.
# Please note, that there is a co-target here, in the implicit-rule.
# As noted in the documentation, cited above, they (co-targets in implicit-rules), have a special and unique "meaning".
%ll %ll.o :
    @echo 'implicit-rule'

# This target, happen to match a co-target above: `%ll.o`.
all.o ::
    echo '$@'




执行,我们得到:

$ make -r all all.o
implicit-rule
echo 'all.o'
all.o



现在,上面的引言说:

  

如果模式规则有多个目标,make就知道了   规则的配方负责制定所有目标。该   配方只执行一次以制作所有目标。

  

但是,当运行此文件的配方时,其他目标将被标记为已自行更新。



因此,如果all.o 已被“标记为已更新”(这是 完全 引用。对吗?),在完成构建all之后,我们如何找到重新构建 目标{ {1}},上面最后两行的输出很明显:

all.o


真的?

0 个答案:

没有答案