Makefile GNU Make中的自动删除钩子

Makefile GNU Make中的自动删除钩子,makefile,gnu-make,Makefile,Gnu Make,默认情况下,make自动删除不再需要的目标 例如: do_it: write_bar write_baz echo done > $@ .INTERMEDIATE: write_foo write_bar write_baz write_foo: echo foo > $@ write_bar: write_foo cat $< > $@ echo bar >> $@ write_baz: write_foo e

默认情况下,
make
自动删除不再需要的目标

例如:

do_it: write_bar write_baz
    echo done > $@

.INTERMEDIATE: write_foo write_bar write_baz

write_foo:
    echo foo > $@

write_bar: write_foo
    cat $< > $@
    echo bar >> $@

write_baz: write_foo
    echo buz > $@
do\u it:写吧写吧
回音完成>$@
.中级:write_foo write_bar write_baz
写_foo:
echo foo>$@
写吧:写吧
cat$<>$@
回音条>>$@
写_-baz:写_-foo
echo buz>$@
执行
write_-bar
write_-baz
后,将删除此处的
write_-foo

我不想简单地删除文件,而是在
write\u foo
删除之前执行一些操作

我是否可以更改自动删除命令或为此操作分配任何挂钩

更新:自动删除仅适用于中间规则。

  • make(至少GNU make)不会自动删除成功构建的目标(如果make是
    kill
    ed,它会删除目标)
  • .DEFAULT
    不会执行您期望它执行的操作。看
  • 在命令行上调用
    make
    ,执行第一个目标。因为您的第一个目标是write\u foo,所以只执行write\u foo
如果调用
make do\u it
,所有目标都将被执行(当前目录中将显示3个文件)

问题更新后添加:


根据,在
的先决条件中包含中间目标。珍贵
特殊目标可防止删除它。

否,我希望在执行后删除它们,因此
珍贵
对我没有帮助。我只需要在删除文件之前用这个文件执行几个命令。@ WeleHeavy是否考虑将它们保存在<代码>中?宝贵的< /代码>,然后在做了你想做的事情之后手动删除它们?不,你今天不能这样做。实际上make甚至不运行
rm
命令,它只是打印
rm
,但在内部它使用
unlink()
系统调用来删除文件。