gpt4 book ai didi

makefile - GNU Make 中的自动删除钩子(Hook)

转载 作者:行者123 更新时间:2023-12-02 19:54:51 34 4
gpt4 key购买 nike

默认情况下,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 > $@

这里write_foo将在write_barwrite_baz执行后被删除。

我不想简单地删除文件,而是在删除 write_foo 之前执行一些操作。

我可以更改自动删除命令或为此操作分配任何 Hook 吗?

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

最佳答案

  • make(至少是 GNU Make)不会自动删除成功构建的目标(如果 make 被 killed,它会删除目标)。
  • .DEFAULT 不会执行您期望的操作。请参阅https://www.gnu.org/software/make/manual/html_node/Special-Targets.html
  • 在命令行上调用 make 会执行第一个目标。由于您的第一个目标是 write_foo,因此只会执行 write_foo。

如果调用make do_it,所有目标都将被执行(并且3个文件将出现在当前目录中)。

问题更新后添加:

根据https://www.gnu.org/software/make/manual/html_node/Special-Targets.html ,在 .PRECIOUS 特殊目标的先决条件中包含中间目标可防止删除它。

关于makefile - GNU Make 中的自动删除钩子(Hook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23754654/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com