我写了一个Makefile,发现在执行make
命令时,rm
Mmakefile中的所有命令都完成后,执行了意外的操作。但我没有把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
正在删除哪个文件的命令来向您报告删除情况。