为什么我的makefile使用星号作为通配符,但不使用百分比?

问题描述 投票:1回答:1

在我的makefile中:

default: *.s
   echo $(basename $<)

回显基本名,但是

default: %.s
   echo $(basename $<)

输出:

make: *** No rule to make target '%.s', needed by 'default'.  Stop.

我在makefile所在的目录中有smf.s个文件。那么,为什么makefile不将其用作前提条件? (只有类似shell的*可以,但是%不能),为什么?

makefile gnu-make
1个回答
0
投票

您的第一条规则:

default: *.s
   echo $(basename $<)

如您所愿,因为*在GNU Make中是wildcard character

另一方面,您的第二条规则:

default: %.s
   echo $(basename $<)

具有%.s作为先决条件。由于没有名为%.s的文件,因此Make需要附加规则来生成此丢失的文件%.s。这是关于错误消息的内容:

make: *** No rule to make target '%.s', needed by 'default'.  Stop.

您可能会认为%是通配符。实际上,它的行为在pattern rules中是这样的。但是,您的第二个规则不是模式规则。以下是文档摘录:

一个模式规则看起来像一个普通规则,只是其目标包含字符'%'(恰好是其中的一个)。

您的第二个规则的目标,即default,不包含字符%。因此,它不能被视为模式规则。

© www.soinside.com 2019 - 2024. All rights reserved.