保留makefile中通配符定义的中间文件

时间:2015-03-30 22:01:59

标签: makefile

我已经使用Makefile定义了一系列数据处理步骤,但发现属于中间步骤的文件被Make删除。在以下示例中,始终删除文件processed_%.txt

#make some simple data
#echo "test data X" > test_x.txt
#echo "test data y" > test_y.txt

x = test_x.txt
y = test_y.txt

#these are deleted
processed_%.txt: ${x} ${y}
        cat $< > $@

#these remain in the directory
processed_again_%.txt: processed_%.txt
        cat $< > $@

all: processed_again_x.txt processed_again_y.txt

任何人都可以解释发生了什么以及如何禁用/控制此行为吗?

感谢, zachcp

1 个答案:

答案 0 :(得分:1)

这就是chains of implicit rules的工作方式。

  

第二个区别是,如果make确实创建了b以便更新其他东西,那么它会在不再需要之后删除b。因此,make之后不存在的中间文件也不存在。通过打印'rm -f'命令向你报告删除信息,显示它正在删除哪个文件。

您可以通过将文件标记为.SECONDARY

来控制此行为
  

您可以通过将中间文件标记为辅助文件来阻止自动删除它。为此,请将其列为特殊目标.SECONDARY的先决条件。当文件是辅助文件时,make不会仅因为它尚不存在而创建文件,但make不会自动删除该文件。将文件标记为辅助文件也将其标记为中间文件。