1.5 使用 Cargo 管理项目
Cargo 是 Rust 的官方构建系统和依赖管理工具,几乎所有的 Rust 项目都使用它来组织代码、管理依赖、编译程序以及运行测试。掌握 Cargo 的基本用法,是高效开发 Rust 应用的前提。
创建项目
Cargo 支持两种主要类型的项目:
- 二进制项目(binary crate):生成可执行程序,入口为
src/main.rs; - 库项目(library crate):生成可被其他项目引用的库,入口为
src/lib.rs。
使用以下命令创建一个二进制项目:
cargo new my_app
若要创建库项目,则添加 --lib 标志:
cargo new --lib my_lib
项目创建后,会自动生成标准目录结构和 Cargo.toml 配置文件。
项目结构与 Cargo.toml
一个典型的 Cargo 项目结构如下:
my_app/
├── Cargo.toml
└── src/
└── main.rs
Cargo.toml 是项目的清单文件(manifest),包含项目元信息和依赖声明。例如:
[package]
name = "my_app"
version = "0.1.0"
edition = "2021"
[dependencies]
其中:
name是包名称;version遵循语义化版本规范;edition指定使用的 Rust 版本特性集(如 2015、2018、2021);[dependencies]下列出项目依赖的外部 crate。
构建与运行
Cargo 提供了多个命令来管理项目生命周期:
cargo build:编译项目。默认生成调试版本,输出位于target/debug/目录下。cargo build --release:编译优化后的发布版本,输出位于target/release/。cargo run:编译并运行项目。如果是二进制项目,会执行生成的可执行文件。cargo check:快速检查代码是否能通过编译,但不生成可执行文件,速度更快,适合在编辑时频繁使用。
例如,在项目根目录运行:
cargo run
将自动编译并执行程序,无需手动调用 rustc 或处理输出路径。
添加依赖
Rust 的第三方库称为 “crate”,托管在 crates.io 上。要添加依赖,只需在 Cargo.toml 的 [dependencies] 部分指定 crate 名称和版本。
例如,添加 rand crate 用于生成随机数:
[dependencies]
rand = "0.8"
保存后,运行 cargo build 或 cargo run,Cargo 会自动下载、编译该依赖及其传递依赖,并缓存到本地(通常位于 ~/.cargo/registry)。
你也可以使用 cargo add 命令(需安装 cargo-edit 工具或使用 Rust 1.76+ 内置功能)快速添加依赖:
cargo add rand
编写与运行测试
Rust 内置对测试的支持。在源码中,可以使用 #[cfg(test)] 模块编写单元测试。
例如,在 src/main.rs 或 src/lib.rs 中添加:
fn add(a: i32, b: i32) -> i32 {
a + b
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_add() {
assert_eq!(add(2, 3), 5);
}
}
运行测试:
cargo test
Cargo 会编译并执行所有标记为 #[test] 的函数,报告通过或失败情况。你也可以只运行特定测试:
cargo test test_add
对于集成测试,可在项目根目录下创建 tests/ 目录,每个 .rs 文件会被视为独立的测试套件。
其他常用命令
cargo clean:删除target/目录,清除构建产物;cargo update:更新依赖到兼容的最新版本;cargo doc --open:为项目及依赖生成文档并在浏览器中打开;cargo fmt:自动格式化代码(需安装rustfmt,通常随工具链默认安装);cargo clippy:运行更严格的代码 lint 检查(需安装clippy)。
小结
Cargo 不仅简化了 Rust 项目的构建流程,还提供了完整的依赖管理、测试框架和开发辅助工具。通过统一的项目结构和命令行接口,它让开发者能够专注于代码本身,而不必操心编译细节或依赖冲突。在后续的学习和开发中,你将频繁使用 Cargo 来管理日益复杂的项目。