匹配任何模式规则

vin*_*mar 3 makefile gnu-make

我正在使用 GNU Make 3.81 版本。

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

有人可以解释一下,为什么目标' %: '没有运行?

这不匹配所有文件名吗?

生成文件:

all: test
    echo $@
%: 
    echo 1: $@
te%:
    echo 2: $@
Run Code Online (Sandbox Code Playgroud)

输出:

echo 2: test
2: test
echo all
all
Run Code Online (Sandbox Code Playgroud)

Mad*_*ist 5

make 如何处理 match-anything 模式规则有一些特殊的规则;请参阅文档。您正在此处创建“非终端匹配任何规则”,其规则是:

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

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