我有两个非常相似的makefile,但它们的行为有所不同。 我不明白为什么......
选项1:
all: aa
@echo made
a% : b%
@echo ba
ba : c
失败
我期待这个,因为c不存在。
选项2相同但没有回声:
all: aa
@echo made
a% : b%
ba : c
这个失败了
这很奇怪,因为'aa'有规则。
为什么这两个makefile的行为有所不同?
由于
答案 0 :(得分:0)
aa
没有规则。你的规则:
a% : b%
没有食谱并没有做你认为它正在做的事情。 pattern rule with no recipe 删除模式规则。所以基本上这行是一个无操作(因为你之前没有类似的模式规则)。您可以删除此行并获得相同的行为。
答案 1 :(得分:0)
对于您的方案-1,我自己运行测试,发现如果删除ba : c
规则并且ba
文件已经存在,则可以正常运行。如果您将规则放回任何配方,请尝试检查ba是否是最新的,以便它尝试ba : c
规则,并失败,因为c
没有规则。
如果您不希望规则尝试重新创建"一个文件(意思是去应用其他规则),但只检查它是否存在以应用当前规则,然后对规则::
使用双冒号。