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.
$
什么给出了?
最佳答案
问题
它实际上会匹配任何东西。问题是 GNU Make 默认生成以下内容:
%.sh:
这是built-in dummy pattern rule (请注意,没有食谱)。这可以防止 make 匹配非特定目标模式,即:除 %.sh
之外的目标模式(如您的)。
解决方案
由于虚拟模式规则是为内置 .SUFFIXES
中找到的每个后缀生成的。目标,您可以在 makefile 中显式写入空的 .SUFFIXES
目标(如下所示),或者简单地使用命令行选项 -r 运行
或 make
--no-builtin-rules
以禁用此类虚拟内置模式规则的生成。
.SUFFIXES:
%: %.in
cp $< $@
这样,如下:
$ make config.sh
cp config.sh.in config.sh
按您的预期工作。
关于makefile - GNU 制造商 : % doesn't match dotted filenames?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49102987/