Cargo 包管理器
Cargo 是 Rust 的构建系统和包管理器。它处理依赖管理、编译、测试、文档生成等任务,是 Rust 开发的核心工具。
项目管理
创建新项目
# 创建二进制项目
cargo new my_project
cargo new my_project --bin # 显式指定二进制项目
# 创建库项目
cargo new my_library --lib
# 在现有目录初始化项目
cargo init
cargo init --lib # 初始化为库项目
项目结构
my_project/
├── Cargo.toml # 项目配置文件
├── Cargo.lock # 依赖锁定文件
├── src/
│ ├── main.rs # 二进制项目入口
│ └── lib.rs # 库项目入口
├── tests/ # 集成测试
├── examples/ # 示例代码
├── benches/ # 性能测试
└── target/ # 编译输出目录
构建和运行
基本构建命令
# 编译项目(调试模式)
cargo build
# 编译项目(发布模式)
cargo build --release
# 编译并运行
cargo run
# 编译并运行(发布模式)
cargo run --release
# 只检查代码(不生成二进制文件)
cargo check
指定目标
# 运行特定的二进制文件
cargo run --bin my_binary
# 运行示例
cargo run --example my_example
# 为特定平台构建
cargo build --target x86_64-pc-windows-gnu
依赖管理
Cargo.toml 配置
[package]
name = "my_project"
version = "0.1.0"
edition = "2021"
authors = ["Your Name <you@example.com>"]
description = "A sample Rust project"
license = "MIT"
repository = "https://github.com/username/my_project"
[dependencies]
serde = "1.0"
tokio = { version = "1.0", features = ["full"] }
reqwest = { version = "0.11", optional = true }
[dev-dependencies]
criterion = "0.5"
[build-dependencies]
cc = "1.0"
[features]
default = ["json"]
json = ["serde/derive"]
http = ["reqwest"]
添加依赖
# 添加依赖
cargo add serde
# 添加特定版本
cargo add serde@1.0.100
# 添加开发依赖
cargo add --dev criterion
# 添加构建依赖
cargo add --build cc
# 添加可选依赖
cargo add --optional reqwest
更新依赖
# 更新所有依赖
cargo update
# 更新特定依赖
cargo update serde
# 查看过时的依赖
cargo outdated # 需要安装 cargo-outdated
测试
运行测试
# 运行所有测试
cargo test
# 运行特定测试
cargo test test_name
# 运行匹配模式的测试
cargo test integration
# 显示测试输出
cargo test -- --nocapture
# 并行运行测试
cargo test -- --test-threads=4
测试类型
# 只运行单元测试
cargo test --lib
# 只运行集成测试
cargo test --test integration_test
# 运行文档测试
cargo test --doc
# 运行性能测试
cargo bench
文档
生成文档
# 生成项目文档
cargo doc
# 生成并打开文档
cargo doc --open
# 包含私有项的文档
cargo doc --document-private-items
# 不包含依赖的文档
cargo doc --no-deps
文档测试
/// 这个函数将两个数字相加
///
/// # Examples
///
/// ```
/// use my_crate::add;
/// assert_eq!(add(2, 3), 5);
/// ```
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
发布和分享
发布到 crates.io
# 登录 crates.io
cargo login
# 发布包
cargo publish
# 干运行(检查但不发布)
cargo publish --dry-run
# 撤回版本(72小时内)
cargo yank --vers 1.0.1
本地安装
# 从 crates.io 安装
cargo install ripgrep
# 从本地路径安装
cargo install --path .
# 从 Git 仓库安装
cargo install --git https://github.com/user/repo
# 卸载
cargo uninstall ripgrep
工作空间
创建工作空间
# Cargo.toml (根目录)
[workspace]
members = [
"crate1",
"crate2",
"tools/*",
]
[workspace.dependencies]
serde = "1.0"
工作空间命令
# 构建整个工作空间
cargo build
# 构建特定包
cargo build -p crate1
# 运行特定包
cargo run -p crate1
# 测试整个工作空间
cargo test
# 测试特定包
cargo test -p crate1
配置和环境
Cargo 配置文件
# ~/.cargo/config.toml 或 .cargo/config.toml
[build]
target = "x86_64-unknown-linux-gnu"
rustflags = ["-C", "target-cpu=native"]
[target.x86_64-pc-windows-gnu]
linker = "x86_64-w64-mingw32-gcc"
[registries.my-registry]
index = "https://my-intranet:8080/git/index"
[net]
retry = 2
git-fetch-with-cli = true
[profile.release]
lto = true
codegen-units = 1
环境变量
# 设置目标平台
export CARGO_BUILD_TARGET=x86_64-pc-windows-gnu
# 设置编译标志
export RUSTFLAGS="-C target-cpu=native"
# 设置 Cargo 主目录
export CARGO_HOME=~/.cargo
# 离线模式
export CARGO_NET_OFFLINE=true
性能优化
编译配置
[profile.dev]
opt-level = 0
debug = true
split-debuginfo = '...'
strip = "none"
debug-assertions = true
overflow-checks = true
lto = false
panic = 'unwind'
incremental = true
codegen-units = 256
rpath = false
[profile.release]
opt-level = 3
debug = false
strip = "debuginfo"
debug-assertions = false
overflow-checks = false
lto = true
panic = 'unwind'
incremental = false
codegen-units = 1
rpath = false
编译加速
# 使用 sccache 缓存编译结果
export RUSTC_WRAPPER=sccache
# 并行编译
export CARGO_BUILD_JOBS=8
# 增量编译
export CARGO_INCREMENTAL=1
常用子命令
代码质量
# 代码格式化
cargo fmt
# 代码检查
cargo clippy
# 安全审计
cargo audit # 需要安装 cargo-audit
# 许可证检查
cargo license # 需要安装 cargo-license
项目信息
# 查看项目信息
cargo metadata
# 查看依赖树
cargo tree
# 查看过时依赖
cargo outdated
# 查看重复依赖
cargo duplicate # 需要安装 cargo-duplicate
清理和维护
# 清理构建产物
cargo clean
# 修复 Cargo.lock
cargo generate-lockfile
# 验证项目
cargo verify-project
# 获取帮助
cargo help
cargo help build
自定义命令
安装有用的 Cargo 扩展
# 代码覆盖率
cargo install cargo-tarpaulin
# 安全审计
cargo install cargo-audit
# 许可证检查
cargo install cargo-license
# 依赖分析
cargo install cargo-tree
# 性能分析
cargo install cargo-profiler
# 交叉编译
cargo install cross
使用扩展
# 生成代码覆盖率报告
cargo tarpaulin --out Html
# 安全审计
cargo audit
# 使用 cross 进行交叉编译
cross build --target aarch64-unknown-linux-gnu
最佳实践
-
版本管理:
- 使用语义化版本
- 及时更新 Cargo.lock
-
依赖管理:
- 最小化依赖
- 使用特性标志控制可选功能
-
性能优化:
- 发布版本使用
--release
- 配置适当的编译选项
- 发布版本使用
-
代码质量:
- 定期运行
cargo clippy
- 使用
cargo fmt
保持代码风格一致
- 定期运行
-
安全性:
- 定期运行
cargo audit
- 及时更新依赖
- 定期运行
Cargo 是 Rust 生态系统的核心,掌握它的使用对于高效的 Rust 开发至关重要。