Makefile中的特殊案例模式规则

Makefile中的特殊案例模式规则,makefile,rule,Makefile,Rule,对于具有给定扩展名的文件,我有一个通用规则,但我想为具有前缀的文件添加特殊情况。我试过这个: special-%.dat: special-%.raw echo "Running rule 1" %.dat: echo "Running rule 2" 但是当我运行makespecial-1.dat时,它会忽略第一条规则并运行第二条规则。改变规则的顺序没有什么区别。如何修复此问题?文件special-1.raw是否存在?如果该文件不存在(并且您没有可以创建它的规则),make

对于具有给定扩展名的文件,我有一个通用规则,但我想为具有前缀的文件添加特殊情况。我试过这个:

special-%.dat: special-%.raw
    echo "Running rule 1"

%.dat:
    echo "Running rule 2"

但是当我运行
makespecial-1.dat
时,它会忽略第一条规则并运行第二条规则。改变规则的顺序没有什么区别。如何修复此问题?

文件
special-1.raw
是否存在?如果该文件不存在(并且您没有可以创建它的规则),make将永远不会选择此规则,因为前提条件不可用。这本身并不是一个错误:只有make找不到可以构建这个目标的规则,它才会失败


运行
make-d
将准确地向您展示make是如何递归地考虑每个目标及其先决条件的。

您确定您的示例是正确的吗?目标
out-1.dat
不可能使用模式
特殊-%.dat
:它们不匹配。这一点很好;我从稍微不同的版本复制并粘贴了Makefile和命令行。现在修好了。