为什么GNU make在使用模式规则时会删除中间目标?

时间:2017-04-19 13:14:13

标签: makefile gnu-make

我有一个类似以下的makefile:

.PHONY: all
all: foo_1.txt foo_2.txt foo_xxx.txt

.PHONY: clean
clean:
        rm -f foo_* bar_*

foo_%.txt: bar_%.txt
        cp $< $@

#.PRECIOUS: bar_%.txt
bar_%.txt:
        touch $@ 

bar_2.txt:
        touch $@

&#34;输出全部&#34;正在接受

touch bar_1.txt 
cp bar_1.txt foo_1.txt
touch bar_2.txt
cp bar_2.txt foo_2.txt
touch bar_xxx.txt 
cp bar_xxx.txt foo_xxx.txt
rm bar_xxx.txt bar_1.txt

最终将删除由使用模式的规则(bar_xxx.txt,bar_1.txt)创建的中间文件。我发现.PRECIOUS可以抑制这种行为(在代码中是故意注释掉的行)。

为什么默认情况下删除带有模式的规则创建的中间文件和没有模式的规则创建的文件不是?

1 个答案:

答案 0 :(得分:1)

通过“中间文件”的定义,您不能拥有由显式规则(“没有模式”的规则)创建的中间文件。

请参阅Chains of Implicit Rules部分以了解此功能。如果您有具体问题,请更新您的问题。

相关问题