Makefile:没有规则来制作目标

时间:2017-04-27 18:43:37

标签: makefile

我有两个非常相似的makefile,但它们的行为有所不同。 我不明白为什么......

选项1:

all: aa
    @echo made
a% : b%
    @echo ba
ba : c

失败

make:***没有规则来制作'ba'所需的目标'c'。停止。

我期待这个,因为c不存在。

选项2相同但没有回声:

all: aa
    @echo made
a% : b%
ba : c

这个失败了

make:***没有规则来制作'所有'所需的目标'aa'。停止。

这很奇怪,因为'aa'有规则。

为什么这两个makefile的行为有所不同?

由于

2 个答案:

答案 0 :(得分:0)

aa没有规则。你的规则:

a% : b%

没有食谱并没有做你认为它正在做的事情。 pattern rule with no recipe 删除模式规则。所以基本上这行是一个无操作(因为你之前没有类似的模式规则)。您可以删除此行并获得相同的行为。

答案 1 :(得分:0)

对于您的方案-1,我自己运行测试,发现如果删除ba : c规则并且ba文件已经存在,则可以正常运行。如果您将规则放回任何配方,请尝试检查ba是否是最新的,以便它尝试ba : c规则,并失败,因为c没有规则。

如果您不希望规则尝试重新创建"一个文件(意思是去应用其他规则),但只检查它是否存在以应用当前规则,然后对规则::使用双冒号。