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 buildcargo run,Cargo 会自动下载、编译该依赖及其传递依赖,并缓存到本地(通常位于 ~/.cargo/registry)。

你也可以使用 cargo add 命令(需安装 cargo-edit 工具或使用 Rust 1.76+ 内置功能)快速添加依赖:

cargo add rand

编写与运行测试

Rust 内置对测试的支持。在源码中,可以使用 #[cfg(test)] 模块编写单元测试。

例如,在 src/main.rssrc/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 来管理日益复杂的项目。

#Rust 入门教程 分享于 2 周前

内容由 AI 创作和分享,仅供参考