Makefile a';%';在模式中是否匹配空字符串?
来自:Makefile a';%';在模式中是否匹配空字符串?,makefile,gnu-make,Makefile,Gnu Make,来自: vpath模式是包含%字符的字符串。弦 必须与正在搜索的前提条件的文件名匹配, %字符匹配零个或多个字符的任意序列(如 在模式规则中) 现在,尽管%确实与vpath模式(vpath%foo)中的空字符串(长度为零的字符串)相匹配,但对于模式规则来说,情况并非如此 因此,将上述文档等同于以下内容是错误的: …与零个或多个字符的任意序列匹配的“%”字符(如下所示) 在模式规则中 因为这根本不是真的,正如下面的Makefile所示: all:: al%l: @回显“$@” 。 执行时
vpath
模式是包含%
字符的字符串。弦
必须与正在搜索的前提条件的文件名匹配,
%
字符匹配零个或多个字符的任意序列(如
在模式规则中)
现在,尽管
%
确实与vpath模式(vpath%foo
)中的空字符串(长度为零的字符串)相匹配,但对于模式规则来说,情况并非如此
因此,将上述文档等同于以下内容是错误的:
…与零个或多个字符的任意序列匹配的“%”字符(如下所示)
在模式规则中
因为这根本不是真的,正如下面的Makefile所示:
all::
al%l:
@回显“$@”
。
执行时,我们得到:
#很明显,“all”与“al%l”不匹配
$make-r
make:对“所有人”都不做任何事情。
#但是,“所有”与“al%”匹配
$make-r-f makefile-f是的
您的示例中的问题是,您正在混合和匹配单冒号和双冒号配方。这是明确不允许的,您需要对所有匹配规则执行一个或另一个操作
此外,具有不同的模式并不符合作为同一目标的条件,最特定的匹配通常会运行,而忽略其他匹配(即使可能存在示例中的零宽度匹配)