GNU不能匹配%以从一个规则中创建多个目标

时间:2019-08-20 13:50:56

标签: makefile

我在理解什么似乎是基本的make行为时遇到了麻烦,有多个前提条件和一些共同的词干都可以通过一条规则进行匹配。

我尝试阅读Pattern intro chapter,但似乎误解了一些基本知识。

all: prefix-variant1.so prefix-variant2.so

prefix-%.so : %.o
    @echo "variant with prerequisite succeeded"

运行make时,出现以下错误:

make: *** No rule to make target 'prefix-variant1.so', needed by 'all'.  Stop.

我在做什么错了?

1 个答案:

答案 0 :(得分:2)

  

我在做什么错了?

请记住,make允许有许多并发的模式/后缀规则。例如,目标文件export default class AddWater extends React.Component { handleAddQuantity = (e) => { e.preventDefault(); const quantity = e.target.elements.quantity.value; props.handleAddQuantity(quantity) }; render() { return ( <form onSubmit={this.handleAddQuantity}> <input type="text" name="quantity" /> <input type="submit" value="Submit" /> </form> ) } 可以由%.o的C编译器创建,也可以由%.c的C ++编译器创建,甚至可以由%.cpp的Fortran创建,依此类推,等等。

因此,仅当存在相应的必备文件(或可以构建,请参见Chained Rules)时才考虑模式规则。您的情况是%.f。如果当前目录中不存在此类文件,并且没有其他适合于从源代码构建文件的规则,则make会忽略该规则,并说“没有规则可作为目标”。