我正在使用GNU Make 3.81版本。
从以下示例中,我希望匹配任何模式(%:)必须打印。而不是 te%:已经执行。
有人可以解释,为什么要定位' %:'没跑?
这与所有文件名不匹配吗?
生成文件:
all: test
echo $@
%:
echo 1: $@
te%:
echo 2: $@
输出:
echo 2: test
2: test
echo all
all
答案 0 :(得分:3)
对于如何使对待 - 任何模式规则有特殊规则;见documentation。您正在创建一个"非终端匹配 - 任何规则"在这里,规则是这样的:
非终端匹配任何规则不能应用于指示特定数据类型的文件名。如果某些非匹配任何隐式规则目标与其匹配,则文件名表示特定类型的数据。
在您的情况下,您有一个非匹配任何隐式规则目标(te%
),它与文件名(test
)匹配,因此是非终端匹配任何规则({{1 }}无法匹配。