Makefile匹配任何规则作为中间

时间:2016-10-03 02:02:47

标签: makefile gnu

考虑这个简单的Makefile:

%.one: %.two
    echo one
%.two: %.three
    echo two
%.three: %.four
    echo three

all: hi.one

正如预期的那样,make all将产生:

echo three
three
echo two
two
echo one
one

但是如果我制作一个没有任何前缀/后缀的中间规则:

%.one: %
    echo one
%: %.three
    echo one
%.three: %.four
    echo one

all: hi.one

Make会失败,说没有规则可以hi.one。这是不可能的Make?

1 个答案:

答案 0 :(得分:4)

不可能这样做,非终端匹配 - 任何规则都会被模式规则的依赖性忽略。

本手册中并未实际提及此内容,但make source(implicit.c:321)中的以下注释明确了

      /* Rules that can match any filename and are not terminal
         are ignored if we're recursing, so that they cannot be
         intermediate files.  */