这是一个make bug吗?

时间:2017-01-26 02:06:06

标签: makefile

很可能不是,但我现在一直在努力争取这一个:

$ cat Makefile
${FILE1}:
        touch $@

a: ${FILE1}

${FILE2}: a
        touch $@

$ make FILE1=foo FILE2=bar bar
touch foo
touch bar

$ ls
bar  foo  Makefile

$ make FILE1=foo FILE2=bar bar
touch bar

为什么bar规则仍然有效?

如果我将Makefile更改为:

${FILE1}:
        touch $@

${FILE2}: ${FILE1}
        touch $@

一切正常,即bar不再被触及。

1 个答案:

答案 0 :(得分:1)

目标bar有一个先决条件a。您有a的规则,但它实际上并不构建名为“a”的文件。因此,每当您要求Make重建bar(如有必要)时,Make会发现先决条件a不存在,因此它必须尝试重建这两个目标。