很可能不是,但我现在一直在努力争取这一个:
$ 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
不再被触及。
答案 0 :(得分:1)
目标bar
有一个先决条件a
。您有a
的规则,但它实际上并不构建名为“a”的文件。因此,每当您要求Make重建bar
(如有必要)时,Make会发现先决条件a
不存在,因此它必须尝试重建这两个目标。