Rust & Cargo 清理无用版本与构建缓存指南
在 Rust 开发过程中,随着代码的不断编译、依赖版本的升级以及 Rust 编译器的更新,硬盘上会堆积大量不再使用的旧版构建产物。通常,“清理无用版本”分为两个维度:
- 本地项目清理(清理项目内的
target/目录) - 全局缓存清理(清理系统级的
~/.cargo/目录)
以下是针对这两个维度的精准清理方案。
一、 清理项目本地构建产物(target/ 目录)
原生的 cargo clean 命令默认会暴力删除整个 target/ 目录。这会释放最大空间,但缺点是下次编译时需要从零开始重新编译所有依赖。如果只想“智能地清理无用或旧版文件”,推荐使用以下方法。
方法 1:使用原生命令精准清理
如果不想安装额外插件,可以在原生 cargo clean 命令中附加参数,只清理特定部分,保留其他有用的缓存:
- 清理特定旧版依赖的缓存(例如你刚刚升级了某个第三方库,想单独清理它的旧产物):
bash
cargo clean -p <package_name>- 只清理特定构建配置下的产物(例如清理 Debug 开发版,保留 Release 发布版):
bash
cargo clean --profile dev
# 或者只清理 release:
cargo clean --release方法 2:使用 cargo-sweep(强烈推荐 ⭐)
cargo-sweep 是一款由社区主导的智能清理工具。它能识别出哪些编译产物已经过期或不再使用,并只删除这些无用文件,而不影响你当前正在使用的编译缓存。
- 安装工具:
bash
cargo install cargo-sweep- 按时间清理(推荐): 清理当前项目中,超过 30 天未被使用的旧版构建文件:
bash
cargo sweep --time 30- 按编译器版本清理: 每次执行
rustup update升级编译器后,旧版编译器生成的缓存便作废了。使用以下命令可以清理掉所有非当前编译器生成的无用产物:
bash
cargo sweep --installed- 安全预览模式: 所有
cargo sweep命令都可以加上--dry-run参数。这会让你先“预览”将被删除的文件和能释放的空间,而不会立刻执行删除:
bash
cargo sweep --dry-run --time 30方法 3:批量清理本机所有项目的缓存 cargo-clean-all
如果你电脑里散落着几十个 Rust 项目,手动挨个去目录里清理太麻烦。cargo-clean-all 可以帮你一次性找出并清理它们。
- 安装工具:
bash
cargo install cargo-clean-all- 按未活跃时间批量清理: 清理电脑中所有超过 7 天没有进行过编译的 Rust 项目的
target/目录:
bash
cargo clean-all --keep-days 7 ~二、 清理全局依赖缓存(~/.cargo/ 目录)
随着时间推移,我们在所有 Rust 项目中下载过的 .crate 压缩包、解压后的源码文件和依赖注册表索引,都会被缓存在 ~/.cargo/ 下,占用几十甚至上百 GB 的空间。
方法 1:依赖 Cargo 内置的自动垃圾回收 (GC)
在较新的 Rust 版本(Rust 1.88 及近期版本)中,Cargo 已经内置了全局缓存的自动垃圾回收(GC)功能。
- 工作原理:Cargo 会在后台自动记录每一个全局依赖包和注册表索引的最后访问时间。
- 触发机制:在日常执行
cargo build或cargo update时,Cargo 会在后台静默清理已经数月未被任何项目使用的无用依赖。 - 建议:对于保持 Rust 工具链最新的开发者,通常不需要再手动管理全局缓存。
方法 2:使用 cargo-cache 强制手动清理
如果你使用的 Rust 版本较旧,或者系统盘马上就要满了,需要立刻释放空间,可以使用 cargo-cache 深度清理工具。
- 安装工具:
bash
cargo install cargo-cache- 查看当前全局缓存的空间占用情况:
bash
cargo cache- 自动清理所有冗余和无用的老版本缓存:
bash
cargo cache --autoclean- 极端清理(慎用): 如果想一口气清空所有下载的第三方包缓存(下次编译任何项目都会重新下载所需的依赖):
bash
cargo cache -a💡 最佳实践总结
- 日常项目维护:习惯性地在项目里运行
cargo sweep -t 30。 - 升级编译器后:运行一次
cargo sweep --installed,及时清理旧版工具链留下的垃圾。 - 全局空间告急时:运行
cargo cache --autoclean给~/.cargo/瘦身。