sublime text构建系统不提供自动清理功能,因其仅执行命令而无clean钩子;需手动定义clean.sublime-build任务,用shell_cmd调用rm/del或make clean等命令,并严格限定working_dir和通配符以防误删。

Sublime Text 的构建系统本身不提供“清理”功能,必须手动定义一个反向构建任务,或借助外部脚本/命令完成生成文件的删除。
为什么 Sublime 的 build 命令不能自动清理
Sublime 的构建系统(.sublime-build 文件)只负责执行命令并捕获输出,它没有内置的 clean 生命周期钩子。你运行 Ctrl+B 时,它只调用你写的 cmd 或 shell_cmd,不会自动识别哪些是中间文件、哪些该删。
- 常见构建如
g++、make、python -m py_compile默认只生成,不清理 - 即使你在
cmd中写rm *.o && gcc ...,也属于“每次构建前先删”,不是独立的清理操作 - 构建失败时,中间文件可能残留;手动修改源码后忘记重建,旧目标文件会误导调试
添加独立的 clean 构建任务(推荐)
在 Packages/User/ 目录下新建一个 Clean.sublime-build 文件,内容根据系统和构建工具定制:
{
"shell_cmd": "rm -f *.o *.exe *.pyc __pycache__/ *.out",
"file_regex": "^.*$",
"working_dir": "$file_path",
"selector": "source.c, source.cpp, source.python"
}
-
shell_cmd中的命令需适配你的 shell:Windows 用户应改用del /f /q *.o *.exe,或安装 Git Bash 后统一用rm -
working_dir设为$file_path确保在当前文件所在目录执行,避免误删其他位置的同名文件 - 若用
make,可直接写"shell_cmd": "make clean",前提是项目根目录有Makefile且含clean:目标 - 保存后,通过
Ctrl+Shift+P→ 输入Build With: Clean即可触发
避免误删:路径与通配符必须严格限定
构建系统执行的是 shell 命令,没有沙箱。一个宽松的 rm -rf * 可能清空整个项目目录,甚至上层父目录(如果 working_dir 配错)。
- 永远不用
rm -rf .、rm -rf ..或未加引号的$HOME/* - 优先使用明确后缀:如
*.obj而非*.o(Windows 下常是.obj) - 对递归清理(如
__pycache__)加-r时,确保路径是相对且受控的,例如rm -rf \"$file_path/__pycache__\" - 首次使用前,建议先将
shell_cmd改成echo rm -f *.o,看输出是否符合预期
复杂项目建议交给专用工具而非构建系统
当生成物分布在多级目录、或依赖状态(如 CMake 的 build/ 目录)、或需条件判断时,Sublime 构建系统很快力不从心。
- C/C++ 项目:用
cmake --build build --target clean或ninja -t clean,比手写正则更可靠 - Python 项目:配合
setuptools或pip install -e .开发模式,避免生成.pyc到源码树 - 前端项目:直接调用
npm run clean或rimraf dist/,不要试图在.sublime-build里拼接 Node.js 路径 - 关键点:Sublime 构建系统适合轻量、确定性、单目录操作;跨工具链或状态感知型清理,应交还给原生构建工具











