匹配任何模式规则

Match-Anything Pattern Rules

我使用的是 GNU Make 3.81 版本。

从以下示例中,我希望匹配任何模式 (%:) 必须被打印。而不是 te%: 已执行。

谁能解释一下,为什么目标“%:”没有 运行?

这不是匹配所有文件名吗?

生成文件:

all: test
    echo $@
%: 
    echo 1: $@
te%:
    echo 2: $@

输出:

echo 2: test
2: test
echo all
all

对于 make 如何处理匹配任何模式规则,有一些特殊的规则;见documentation。您正在此处创建一个 "non-terminal match-anything rule",其规则是:

A non-terminal match-anything rule cannot apply to a file name that indicates a specific type of data. A file name indicates a specific type of data if some non-match-anything implicit rule target matches it.

在您的情况下,您有一个与文件名 (test) 匹配的非匹配任何隐式规则目标 (te%),因此有一个非终端匹配任何规则 (%:) 无法匹配。