Skip to content

Rust & Cargo 清理无用版本与构建缓存指南

在 Rust 开发过程中,随着代码的不断编译、依赖版本的升级以及 Rust 编译器的更新,硬盘上会堆积大量不再使用的旧版构建产物。通常,“清理无用版本”分为两个维度:

  1. 本地项目清理(清理项目内的 target/ 目录)
  2. 全局缓存清理(清理系统级的 ~/.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 是一款由社区主导的智能清理工具。它能识别出哪些编译产物已经过期或不再使用,并只删除这些无用文件,而不影响你当前正在使用的编译缓存。

  1. 安装工具
bash
cargo install cargo-sweep
  1. 按时间清理(推荐): 清理当前项目中,超过 30 天未被使用的旧版构建文件:
bash
cargo sweep --time 30
  1. 按编译器版本清理: 每次执行 rustup update 升级编译器后,旧版编译器生成的缓存便作废了。使用以下命令可以清理掉所有非当前编译器生成的无用产物:
bash
cargo sweep --installed
  1. 安全预览模式: 所有 cargo sweep 命令都可以加上 --dry-run 参数。这会让你先“预览”将被删除的文件和能释放的空间,而不会立刻执行删除:
bash
cargo sweep --dry-run --time 30

方法 3:批量清理本机所有项目的缓存 cargo-clean-all

如果你电脑里散落着几十个 Rust 项目,手动挨个去目录里清理太麻烦。cargo-clean-all 可以帮你一次性找出并清理它们。

  1. 安装工具
bash
cargo install cargo-clean-all
  1. 按未活跃时间批量清理: 清理电脑中所有超过 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 buildcargo update 时,Cargo 会在后台静默清理已经数月未被任何项目使用的无用依赖。
  • 建议:对于保持 Rust 工具链最新的开发者,通常不需要再手动管理全局缓存。

方法 2:使用 cargo-cache 强制手动清理

如果你使用的 Rust 版本较旧,或者系统盘马上就要满了,需要立刻释放空间,可以使用 cargo-cache 深度清理工具。

  1. 安装工具
bash
cargo install cargo-cache
  1. 查看当前全局缓存的空间占用情况
bash
cargo cache
  1. 自动清理所有冗余和无用的老版本缓存
bash
cargo cache --autoclean
  1. 极端清理(慎用): 如果想一口气清空所有下载的第三方包缓存(下次编译任何项目都会重新下载所需的依赖):
bash
cargo cache -a

💡 最佳实践总结

  1. 日常项目维护:习惯性地在项目里运行 cargo sweep -t 30
  2. 升级编译器后:运行一次 cargo sweep --installed,及时清理旧版工具链留下的垃圾。
  3. 全局空间告急时:运行 cargo cache --autoclean~/.cargo/ 瘦身。

Released under the MIT License.