我对隐式规则的理解是隐式规则只会被使用 如果没有与目标匹配的明确规则。 如果存在与目标匹配的显式规则和隐式规则, 如果使用显式规则,隐式规则将被忽略。
但运行以下示例表明使用了隐式规则,并且未使用空显式规则。
生成文件
all:
%:
#match-anything implicit rule
make的输出是 #matta-anything隐含规则
生成文件
all:
#explicit rule
%:
#match-anything implicit rule
make的输出是 #explicit rule
答案 0 :(得分:1)
Multiple Rules for One Target部分的GNU make手册中记录了此行为。
如果目标的任何显式规则都没有配方,那么make 搜索适用的隐式规则以查找一个请参阅使用 隐含规则)。
Rule Syntax和What Makefiles Contain部分提供了其他信息(与了解各种相互关联的行为相关)。
答案 1 :(得分:0)
来自GNU make manual中的Using Empty Rules:
定义不做任何事情的食谱有时很有用。这只是通过给出一个只包含空格的食谱来完成的。例如:
目标:;
为目标定义一个空配方。您还可以使用以食谱前缀字符开头的行来定义空配方,但这会让人感到困惑,因为这样的行看起来是空的。
您可能想知道为什么要定义不执行任何操作的配方。这是有用的唯一原因是防止目标获得隐式配方(来自隐式规则或.DEFAULT特殊目标;请参阅隐式规则并参阅定义最后阶段默认规则)。