来自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
真的?