GNU Make:%与虚线文件名不匹配?

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

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.
$

是什么赋予了?

makefile gnu-make
1个回答
4
投票

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

按预期工作。

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