Makefile 这是制造臭虫吗?

Makefile 这是制造臭虫吗?,makefile,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 为什么条形码规则仍处于激活状态 如果我将Make

很可能不是,但我已经为此挣扎了一个小时:

$ 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
为什么
条形码规则仍处于激活状态

如果我将
Makefile
更改为:

${FILE1}:
        touch $@

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

一切正常,即不再触摸
条。

目标
有一个先决条件,
a
。对于
a
,您有一个规则,但它实际上并不构建名为“a”的文件。因此,每次您要求Make重建
条形图
(如有必要),Make都会看到先决条件
a
不存在,因此它必须尝试重建两个目标。

我也是这么想的。但是当添加了
.PHONY:a
时,它仍然坚持,所以我认为这是另外一回事。有什么解决办法吗?@MiroKropacek:是的,不止一个。您可以删除
a
规则,因为它不起任何作用。或者您可以引入一个虚拟文件,
a
。也许只需要一个订单就可以了,但这取决于你实际想做什么。