You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何全局永久阻止Make工具删除任何文件?

问题描述

我配置了如下Makefile:

config/%.toml:
    stuff

执行make config/x.toml时,会基于配置文件x运行一系列脚本。但当我按^C中断或操作在某些情况下失败时,Make会删除该文件(并非每次都会)。我尝试添加规则:

PRECIOUS: config/%.toml otherstuff/%

但该规则有时会被忽略,我仍需偶尔恢复配置文件。我希望全局、永久地阻止Make在任何时间、任何位置删除任何文件,该如何实现?

解决方案

核心问题修正

你之前的规则失效,大概率是误用了Make的特殊目标:GNU Make中控制文件不被删除的特殊目标是.PRECIOUS(注意开头的点),而非PRECIOUS。缺少这个点会导致Make无法识别该规则,自然不会生效。

全局永久阻止删除的方法

要实现全局禁止Make删除任何文件,直接在Makefile中添加以下规则即可:

.PRECIOUS: %

这条规则会匹配所有文件,标记它们为「珍贵文件」,无论执行中断、构建失败还是其他场景,Make都不会主动删除这些文件。

可选:仅保护特定模式文件

如果你只是想保护特定模式的文件而非全部,只需修正之前的规则语法:

.PRECIOUS: config/%.toml otherstuff/%

这样就能确保config/下所有.toml文件和otherstuff/下的所有文件不会被Make删除。

替代方案:使用.SECONDARY

另一种等效方式是使用.SECONDARY特殊目标,将所有文件标记为中间文件(Make默认不会删除中间文件):

.SECONDARY: %

效果和.PRECIOUS类似,但.PRECIOUS更直观地表达「禁止删除」的意图。

内容的提问来源于stack exchange,提问作者Kalle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 17:01:05