使用GNU Make 的“中间文件”功能:
就像所有其他文件一样,使用它们的规则重新制作中间文件。但是中间文件有两种不同的处理方式。
第一个区别是如果中间文件不存在会发生什么。如果一个普通文件 b 不存在,并且 make 考虑一个依赖于 b 的目标,它总是创建 b 然后从 b 更新目标。但是如果 b 是一个中间文件,那么 make 就可以不用管它了。它不会打扰更新 b 或最终目标,除非 b 的某些先决条件比该目标更新或有其他原因更新该目标。
第二个区别是,如果 make 确实创建 b 以更新其他内容,它会在不再需要 b 后删除它。因此,在 make 之前不存在的中间文件在 make 之后也不存在。make 通过打印rm -f
显示正在删除的文件的命令向您报告删除情况。
通常,如果在 makefile 中将文件作为目标或先决条件提及,则该文件不能是中间文件。但是,您可以通过将文件列为特殊目标的先决条件来将文件显式标记为中间文件.INTERMEDIATE
。即使以其他方式明确提及文件,这也会生效。
您可以通过将中间文件标记为辅助文件来防止自动删除它。为此,请将其列为特殊目标的先决条件.SECONDARY
。当一个文件是次要文件时,make 不会仅仅因为它不存在而创建该文件,但 make 不会自动删除该文件。将文件标记为次要文件也将其标记为中间文件。
因此,将以下行添加到 Makefile 就足够了:
.INTERMEDIATE : hugefileB hugefileC
第一次调用make:
$ make
touch hugefileB
touch hugefileC
cat hugefileB hugefileC > digestA
rm hugefileB hugefileC
下一次:
$ make
make: `digestA' is up to date.