匹配任何模式规则

时间:2015-03-11 11:59:37

标签: makefile gnu-make

我正在使用GNU Make 3.81版本。

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

有人可以解释,为什么要定位' %:'没跑?

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

生成文件:

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

输出:

echo 2: test
2: test
echo all
all

1 个答案:

答案 0 :(得分:3)

对于如何使对待 - 任何模式规则有特殊规则;见documentation。您正在创建一个"非终端匹配 - 任何规则"在这里,规则是这样的:

  

非终端匹配任何规则不能应用于指示特定数据类型的文件名。如果某些非匹配任何隐式规则目标与其匹配,则文件名表示特定类型的数据。

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