Rust包管理工具Cargo插件cargo-gc-bin的使用:高效清理无用二进制文件,优化磁盘空间

Rust包管理工具Cargo插件cargo-gc-bin的使用:高效清理无用二进制文件,优化磁盘空间

cargo gc

Crates.io License

Cargo扩展工具,用于回收过时的构建产物,同时尽可能避免重新编译。

使用方法

使用cargo安装:

cargo install cargo-gc-bin

安装后会生成cargo-gc可执行文件,可以通过cargo gc命令调用:

cargo gc

该命令会检查并移除当前项目中所有过时的构建产物。更多信息请查看cargo gc --help

限制/已知问题

  • 需要调用cargo build,这会花费大量时间
  • GC后需要重新链接
  • cargo check会从头开始重新检查

工作原理

cargo gc利用cargo build的输出信息来识别正在使用的构建产物,并移除所有其他产物。在当前实现中,顶层产物未被识别,这会导致GC后需要重新链接。

与其他工具如cargo sweep相比,这个工具基于cargo本身提供的信息而非文件系统时间戳。因此它更准确,同时仍尽可能避免重新编译。

未来展望

从技术上讲,可以实现"完美"的GC,即移除所有过时产物而不需要任何重新编译。并且可以完全静态地完成(即不需要调用cargo build),因为(“crate name”, “fingreprint”)可以在cargo外部计算。

完整示例

// 1. 首先安装cargo-gc-bin
cargo install cargo-gc-bin

// 2. 在Rust项目中运行GC
cd your_rust_project
cargo gc

// 3. 查看帮助信息
cargo gc --help

// 4. 典型输出示例(清理前后的磁盘空间对比)
/*
Before GC:
Total disk usage: 1.2GB

After GC:
Total disk usage: 650MB
*/

元数据

  • 版本: 0.1.7
  • 发布时间: 4个月前
  • License: Apache-2.0
  • 大小: 13 KiB

所有者

  • Ruihang Xia (waynexia)

完整示例Demo

以下是一个完整的cargo-gc-bin使用示例:

# 1. 创建一个新的Rust项目
cargo new gc_demo_project
cd gc_demo_project

# 2. 添加一些依赖以生成更多构建产物
cargo add serde serde_json

# 3. 进行多次构建以产生过时产物
cargo build --release
cargo build --release  # 再次构建

# 4. 检查当前target目录大小
du -sh target/release

# 5. 安装cargo-gc-bin工具
cargo install cargo-gc-bin

# 6. 运行垃圾回收
cargo gc

# 7. 再次检查target目录大小
du -sh target/release

# 8. 查看帮助信息
cargo gc --help

典型输出示例:

清理前:
2.1G    target/release

清理后:
1.2G    target/release

1 回复

Rust包管理工具Cargo插件cargo-gc-bin的使用指南

插件介绍

cargo-gc-bin 是一个Cargo插件,用于清理项目中不再需要的二进制文件,帮助开发者优化磁盘空间。它会扫描项目的target目录,识别并删除那些不再被Cargo构建系统引用的二进制文件。

安装方法

使用以下命令安装cargo-gc-bin

cargo install cargo-gc-bin

使用方法

基本清理

运行以下命令来清理当前项目的无用二进制文件:

cargo gc-bin

查看将被删除的文件(模拟运行)

使用--dry-run参数可以预览将被删除的文件,而不会实际执行删除操作:

cargo gc-bin --dry-run

递归清理工作空间

如果你使用的是Cargo工作空间,可以使用--workspace参数递归清理所有成员项目:

cargo gc-bin --workspace

强制清理(跳过确认)

添加--force参数可以跳过确认提示直接执行清理:

cargo gc-bin --force

示例输出

运行cargo-gc-bin的示例输出如下:

Analyzing target directory...
The following binaries are no longer referenced and can be removed:
- target/debug/my_project-abc123
- target/release/examples/old_example-xyz456
- target/debug/deps/unused_bin-789def

Would remove 3 files (total 42.5 MB)
Use `cargo gc-bin` to actually remove these files.

完整使用示例

# 1. 安装插件
cargo install cargo-gc-bin

# 2. 进入Rust项目目录
cd my_rust_project

# 3. 查看将被清理的文件(模拟运行)
cargo gc-bin --dry-run

# 4. 实际执行清理
cargo gc-bin

# 5. 对于工作空间项目,递归清理所有成员
cargo gc-bin --workspace

# 6. 强制清理(跳过确认提示)
cargo gc-bin --force

注意事项

  1. 该插件只会删除二进制文件,不会影响源代码或其他构建产物
  2. 建议在清理前使用--dry-run查看将被删除的文件
  3. 清理后,如果需要这些二进制文件,可以重新构建项目
  4. 该插件不会删除当前正在运行的二进制文件

工作原理

cargo-gc-bin通过以下步骤工作:

  1. 扫描项目的Cargo.toml和构建缓存
  2. 确定当前项目实际需要的二进制文件
  3. 对比target目录中的文件,找出不再被引用的二进制文件
  4. 根据用户选项删除这些文件

这个工具特别适合长期开发的项目,可以有效地回收被旧构建占用的磁盘空间。

回到顶部