是什么导致Make删除中间文件?

是什么导致Make删除中间文件?

我写了一个Makefile,发现在执行make命令时,rmMmakefile中的所有命令都完成后,执行了意外的操作。但我没有把rm命令写在Makefile中。

run-%: d/%.out
    $<

d/%.out: d/%.c
    gcc -o $(subst .c,.out,$<) $<

运行输出make run-a

gcc -o d/a.out d/a.c
d/a.out
rm d/a.out

请注意后面的rm d/a.out,它不是我写的。

rm什么情况下会添加自动命令?

答案1

当您执行此操作时make run-a,该文件d/a.out是由中间目标( 的依赖项run-a)创建的,当主目标 ( run-a) 已构建并且不再需要该中间目标的结果时,该文件将被删除。

d/a.out您可以通过将其声明为“珍贵”来阻止删除:

.PRECIOUS: d/%.out

也可以看看《隐性规则之链》在 GNU Make 手册中:

中间文件像所有其他文件一样使用其规则重新制作。但中间文件的处理方式有两种不同。

第一个区别是 [...]

第二个区别是,如果 make 确实b为了更新其他内容而创建,b它会在不再需要后删除。因此,make之前不存在的中间文件在make之后也不存在。 make 通过打印显示rm -f正在删除哪个文件的命令来向您报告删除情况。

相关内容