Cargo 包管理器完全指南

TL;DR: Cargo 是 Rust 的构建系统和包管理器,处理代码构建、依赖管理和任务自动化。本指南涵盖从安装到高级使用的完整流程。


目录

  1. 安装与配置
  2. 创建第一个项目
  3. 核心命令
  4. 依赖管理
  5. 项目类型
  6. 测试与检查
  7. 优化构建
  8. 高级技巧

安装与配置

自动安装

1
2
3
4
5
# 下载安装脚本
curl https://sh.rustup.rs -sSf | sh

# 或手动下载后检查
sh ./rustup.rs

环境配置

1
2
3
4
5
6
7
8
9
# 立即生效
source $HOME/.cargo/env

# 永久配置(添加到 ~/.bashrc 或 ~/.zshrc)
export PATH="$HOME/.cargo/bin:$PATH"

# 验证安装
rustc --version
cargo --version

包管理器安装(Linux)

1
2
3
4
5
# Debian/Ubuntu
sudo apt install rust cargo

# RHEL/Fedora
sudo dnf install rust cargo

创建第一个项目

二进制项目(默认)

1
2
cargo new hello_opensource
cd hello_opensource

项目结构:

1
2
3
4
hello_opensource/
├── Cargo.toml # 项目配置
└── src/
└── main.rs # 入口文件

库项目

1
cargo new --lib libhello

结构差异:

  • 生成 src/lib.rs 而非 src/main.rs
  • 包含默认测试示例

核心命令

构建与运行

命令 功能 输出目录 使用场景
cargo build 编译项目 target/debug/ 开发调试
cargo run 编译并运行 target/debug/ 快速执行
cargo check 仅检查语法 无二进制文件 快速验证
cargo clean 清理构建产物 删除 target/ 释放空间

时间对比示例

1
2
3
4
5
# build 耗时
time cargo build # ~0.4s

# check 耗时(显著更快)
time cargo check # ~0.15s

依赖管理

添加依赖

编辑 Cargo.toml

1
2
3
[dependencies]
rand = "0.3.14" # 指定版本
serde = "1.0" # 语义化版本

更新依赖

1
2
3
4
5
6
7
8
# 更新所有依赖
cargo update

# 更新特定包
cargo update -p rand

# 查看依赖树
cargo tree

依赖解析机制

  • Cargo.lock:锁定精确版本,确保可重现构建
  • 自动处理传递依赖(如 rand 依赖 libc

项目类型对比

类型 命令 入口文件 输出 适用场景
二进制 cargo new main.rs 可执行文件 应用程序
cargo new --lib lib.rs 库文件 共享代码

测试与检查

运行测试

1
2
3
4
5
6
7
8
# 运行所有测试
cargo test

# 运行特定测试
cargo test test_name

# 包含文档测试
cargo test --doc

默认测试示例

1
2
3
4
5
6
7
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
}

测试输出示例

1
2
3
4
running 1 test
test tests::it_works ... ok

test result: ok. 1 passed; 0 failed; 0 ignored

优化构建

开发构建(默认)

1
2
3
cargo build
# 输出: [unoptimized + debuginfo]
# 包含调试信息,未优化性能

发布构建

1
2
3
4
cargo build --release
# 输出: [optimized]
# 优化性能,移除调试信息
# 编译时间更长,运行时更快

性能对比

构建类型 编译时间 运行时性能 二进制大小 调试信息
Debug 较慢 较大 包含
Release 移除

高级技巧

详细模式

1
2
3
4
5
# 查看底层命令
cargo build -v

# 查看清理操作
cargo clean -v

构建外部包

1
2
3
git clone <repo-url>
cd <package-folder>
cargo build

增量编译

  • 默认启用,加速重新编译
  • 缓存位于 target/debug/incremental/

实用命令集合

1
2
3
4
5
6
7
8
9
10
11
# 格式化代码
cargo fmt

# 代码检查
cargo clippy

# 生成文档
cargo doc --open

# 发布到 crates.io
cargo publish

最佳实践

开发流程

  1. 编码阶段:使用 cargo check 快速验证
  2. 调试阶段:使用 cargo build 生成调试信息
  3. 发布阶段:使用 cargo build --release 优化性能
  4. 测试阶段:使用 cargo test 确保质量

项目维护

  • 定期运行 cargo update 更新依赖
  • 使用 cargo outdated 检查过期依赖
  • 发布前执行 cargo clean && cargo build --release

磁盘管理

  • 使用 cargo clean 清理中间文件
  • 定期清理 ~/.cargo/registry 缓存
  • 使用 cargo sweep 清理旧构建产物

常见问题

如何处理版本冲突?

Cargo 自动解决依赖版本冲突,遵循语义化版本规则。使用 cargo tree 查看依赖关系图。

为什么编译这么慢?

  • 首次构建需下载和编译依赖
  • Release 模式优化级别高
  • 解决方案:使用 cargo check 快速验证

如何加速 CI/CD 构建?

  • 缓存 ~/.cargotarget/ 目录
  • 使用 cargo check 代替 cargo build 进行快速验证

Tags: #rust #cargo #package-manager #build-system #development #tutorial #dependency-management