make中包含命令和目标特定变量的交互

时间:2015-12-20 02:12:09

标签: makefile

这是我的makefile,主要是试图解决在先决条件中没有特定于目标的变量的事实:

#include

如果我这样做:

horse: shoe
    $(info Making horse)

clean:
    @rm -f horse nail shoe shoe.d

# Target-specific variable
shoe: DEPS := nail

shoe: shoe.d
    $(info Making shoe)
    @touch shoe

shoe.d:
    $(info Making shoe.d)
    @echo shoe: $(DEPS) > shoe.d

nail:
    $(info Making nail)
    @touch nail

-include shoe.d

忘了马蹄钉!事实证明,shoe.d的创建好像是在规则运行时没有设置$ DEPS

$ make
Making shoe.d 
Making shoe
Making horse

我找到了两个不同的调整,使事情有效(同时破坏了这一点),证明我真的不明白发生了什么。

1)如果我编辑Makefile以删除最后一个(包含)行,它当然会忘记钉子,但现在正好创建了shoe.d:

$ cat shoe.d 
shoe:

从最后一次调用开始,将include行放回并依赖shoe.d的内容,然后按预期工作:

$ make clean
$ make
Making shoe.d 
Making shoe
Making horse
$ cat shoe.d 
shoe: nail

同样,如果我用明确写出的规则替换include行,事情总是按预期工作。

2)如果我删除DEPS变量的目标特定性质,即只写

$ make
Making nail
Making shoe
Making horse

然后,即使包含到位,事情仍然有效。

有人可以解释这里发生了什么吗?

0 个答案:

没有答案