我已经使用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
答案 0 :(得分:1)
这就是chains of implicit rules的工作方式。
第二个区别是,如果make确实创建了b以便更新其他东西,那么它会在不再需要之后删除b。因此,make之后不存在的中间文件也不存在。通过打印'rm -f'命令向你报告删除信息,显示它正在删除哪个文件。
您可以通过将文件标记为.SECONDARY
您可以通过将中间文件标记为辅助文件来阻止自动删除它。为此,请将其列为特殊目标.SECONDARY的先决条件。当文件是辅助文件时,make不会仅因为它尚不存在而创建文件,但make不会自动删除该文件。将文件标记为辅助文件也将其标记为中间文件。