【发布时间】:2015-08-18 06:15:11
【问题描述】:
来自docs:
第二个区别是,如果
make确实创建了 B 以 更新其他东西,它不再是 B 之后它稍后会删除 需要。因此,之前不存在的中间文件make在make之后也不存在。make将删除报告给 您可以通过打印rm -f命令来显示它正在删除的文件。
现在,一个makefile,像这样:
$(shell rm -rf x D)
$(shell mkdir D)
$(shell touch D/x)
VPATH = D
all: x ;
x:: phony
@echo '$@'
.INTERMEDIATE: D/x
.PHONY: phony
跑步:
$ make
D/x
rm D/x
$ ls D/x
ls: cannot access D/x: No such file or directory
现在,鉴于上面的引用,Make 只删除了一个“以前不存在的中间文件”,我们在这里有一个明确的案例,其中:
- 在运行 Make 之前,目标确实存在。
- 使没有创建目标。
不过,Make 觉得删除这个文件是合适的。它没有要求做的事情。那为什么会这样呢?
将其与以下简单的 makefile 进行比较:
$(shell rm -rf x)
$(shell touch x)
x ::
@echo '$@'
.INTERMEDIATE: x
跑步:
$ make
x
$ ls x
x
就这么简单! Make 没有删除以下文件:
- 它没有创建!
- 在运行 Make 之前已存在
因为,引用上面的文档,删除中间文件的重点是:
因此,
make之前不存在的中间文件在make之后也不存在。
没有别的!
那么,在第一个示例中,Make 是如何绕过并删除预先存在的文件的?
【问题讨论】: