在我的makefile中:
default: *.s
echo $(basename $<)
会回显基本名称,但是
default: %.s
echo $(basename $<)
输出:
make: *** No rule to make target '%.s', needed by 'default'. Stop.
我smf.s
在makefile所在的目录中有文件。那么,为什么makefile不将其用作前提条件?(只有壳状*
,但%
不是),为什么呢?
您的第一条规则:
default: *.s
echo $(basename $<)
可以正常工作,因为它*
是GNU Make中的通配符。
另一方面,您的第二条规则是:
default: %.s
echo $(basename $<)
有%.s
一个先决条件。由于没有名为%.s
Make的文件,因此需要附加规则来生成此丢失的文件%.s
。这就是错误消息的内容:
make: *** No rule to make target '%.s', needed by 'default'. Stop.
您可能会认为这%
是一个通配符。实际上,它在模式规则中表现得如此。但是,您的第二个规则不是模式规则。以下是文档摘录:
模式规则看起来像一条普通规则,只是它的目标包含字符'%'(恰好是其中的一个)。
您第二条规则的目标-即default
-不包含字符%
。因此,它不能被视为模式规则,因此%
前提条件中的,%.s
字面上是%
字符。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句