2016-10-03 57 views
1

考虑一个简单的Makefile:的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是不可能的?

+0

不'hi.four'存在吗? – igagis

+0

是的,它确实存在。 –

回答

3

不,这是不可能的,对于模式规则的依赖性,非终结匹配任何规则都会被忽略。

这不是真正的手册中提到,但在化妆源(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. */ 
+0

这让我难过。 –

+0

@CinoltYuklair那么你的例子没有理由使用匹配任何规则;几乎肯定有更好的方式来处理你真正想在这里完成的任何事情。 – user657267

+0

UNIX中的二进制文件没有任何前缀/后缀,因此当前目录中的二进制文件只会在模式规则中使用'%'。 –