GNU Make:%与虚线文件名不匹配?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GNU Make:%与虚线文件名不匹配?相关的知识,希望对你有一定的参考价值。
documentation声称模式规则中的%
将匹配任何东西。看起来这不是真的:
$ ls
config.sh.in foo.in Makefile
$ cat Makefile
%: %.in
cp $< $@
$ make foo
cp foo.in foo
$ make config.sh
make: *** No rule to make target 'config.sh'. Stop.
$
是什么赋予了?
答案
Problem
它实际上会匹配任何东西。问题是GNU Make默认生成以下内容:
%.sh:
这是一个built-in dummy pattern rule(注意,没有配方)。这可以防止make匹配非特定的目标模式,即:%.sh
以外的目标模式(和你的一样)。
Solution
由于为内置.SUFFIXES
目标中的每个后缀生成虚拟模式规则,您可以在makefile中显式写入空.SUFFIXES
目标(如下所示),或者只需使用命令行选项make
或-r
运行--no-builtin-rules
为了禁止生成这种虚拟内置模式规则。
.SUFFIXES:
%: %.in
cp $< $@
这样,以下内容:
$ make config.sh
cp config.sh.in config.sh
按预期工作。
以上是关于GNU Make:%与虚线文件名不匹配?的主要内容,如果未能解决你的问题,请参考以下文章