我写了一个Makefile,发现在执行make
命令时,rm
在Mmakefile中的所有命令都完成后执行了一个意外。但是我没有rm
在Makefile中写命令。
run-%: d/%.out
$<
d/%.out: d/%.c
gcc -o $(subst .c,.out,$<) $<
Run Code Online (Sandbox Code Playgroud)
运行输出make run-a
:
gcc -o d/a.out d/a.c
d/a.out
rm d/a.out
Run Code Online (Sandbox Code Playgroud)
注意rm d/a.out
我没有写的尾随。
什么情况下会rm
添加自动命令?
Kus*_*nda 10
当您这样做时make run-a
,该文件d/a.out
是由中间目标( 的依赖项run-a
)创建的,当主目标 ( run-a
) 已构建并且不再需要该中间目标的结果时,该文件将被删除。
您可以d/a.out
通过将其声明为“宝贵的”来防止删除:
.PRECIOUS: d/%.out
Run Code Online (Sandbox Code Playgroud)
另请参阅GNU Make 手册中的“隐式规则链”:
中间文件像所有其他文件一样使用它们的规则重新制作。但是中间文件有两种不同的处理方式。
第一个区别是 [...]
第二个区别是,如果 make 确实
b
为了更新其他东西而创建,它会b
在不再需要之后删除。因此,在make之前不存在的中间文件在make之后也不存在。make 通过打印一个rm -f
显示它正在删除的文件的命令来向您报告删除。
归档时间: |
|
查看次数: |
2058 次 |
最近记录: |