makefile Pattern Rule先决条件可以是模式规则吗?

时间:2015-03-16 16:43:04

标签: makefile gnu-make

我有这个makefile:

.PHONY: all
all: foo.o

makefile: ;

%.inc:
    echo INC
    touch $@

%.o: bar.inc
    echo O
    touch $@

%.o:
    FAIL

我希望它使用第一个%.o规则,创建bar.inc作为先决条件,然后创建foo.o.相反,它使用最后一条规则,我得到了这个:

FAIL
make: FAIL: Command not found
make: *** [foo.o] Error 127

如果我将%.inc更改为bar.inc或将%.o更改为foo.o,则可以正常工作。 documentation

  

为了应用模式规则,其目标模式必须与所考虑的文件名匹配,并且其所有先决条件(在模式替换之后)必须命名存在或可以的文件。< / p>

模式规则%.inc是否不算“可以制作”?我正在使用GNU Make 3.81。

1 个答案:

答案 0 :(得分:1)

您缺少的相关详细信息位于10.5.4 How Patterns Match部分。

具体(强调我的):

  

仅当存在与文件名匹配的目标模式并且该规则中的所有先决条件都存在或可以构建时,模式规则才可用于构建给定文件。您编写的规则优先于内置的规则。但请注意,实际存在或提及其先决条件的规则始终优先于具有必须通过链接其他隐式规则的先决条件的规则。

所以问题不在于你的先决条件是不可能的,而是因为你的另一条规则“赢了”所以make甚至没有尝试。

MadScientist在他的回答here中提供了一些额外的信息和细节。