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.
$
是什么给出了?
答案 0 :(得分:4)
它实际上会匹配任何东西。问题是GNU Make默认生成以下内容:
%.sh:
哪个是built-in dummy pattern rule(注意没有配方)。这会阻止make匹配非特定目标模式,即:%.sh
以外的目标模式(与您的一样)。
由于为内置.SUFFIXES
目标中的每个后缀生成了虚拟模式规则,因此您可以在makefile中显式写入空.SUFFIXES
目标(如下所示),或者只是运行make
使用命令行选项-r
或--no-builtin-rules
来禁用此类虚拟内置模式规则的生成。
.SUFFIXES:
%: %.in
cp $< $@
这样,以下内容:
$ make config.sh
cp config.sh.in config.sh
按预期工作。