Cargo 是 Rust 官方的项目管理和构建工具

Cargo = Rust 的包管理器 + 构建工具 + 项目脚手架 + 测试工具

对比JAVA里的 Maven,那么 Cargo 在 Rust 里的地位就有点像:

Java 生态 Rust 生态
Maven / Gradle Cargo
pom.xml Cargo.toml
Maven dependency crate dependency
mvn compile cargo build
mvn test cargo test
mvn package cargo build --release

1. Cargo 主要解决什么问题?

写 Rust 项目时,Cargo 主要帮你做这些事:

1)创建项目

cargo new hello_rust

会生成一个标准 Rust 项目:

hello_rust/
├── Cargo.toml
└── src/
    └── main.rs

其中:

[package]
name = "hello_rust"
version = "0.1.0"
edition = "2021"

[dependencies]

Cargo.toml 就是项目配置文件,类似 Maven 的 pom.xml


2)编译项目

cargo build

Cargo 会自动调用 rustc 编译器,把项目编译出来。

默认生成的是调试版本,路径一般是:

target/debug/项目名

如果要生成正式发布版本:

cargo build --release

生成路径是:

target/release/项目名

--release 会开启优化,速度更快,但是编译更慢。


3)运行项目

cargo run

这个命令相当于:

cargo build
./target/debug/项目名

也就是 先编译,再运行


4)管理依赖

Rust 生态里的第三方库叫 crate

比如你想使用随机数库 rand,就在 Cargo.toml 里写:

[dependencies]
rand = "0.8"

然后代码里可以这样用:

use rand::Rng;

fn main() {
    let num = rand::thread_rng().gen_range(1..=100);
    println!("{}", num);
}

Cargo 会自动下载依赖、解析版本、编译依赖。


5)测试项目

cargo test

Cargo 会自动寻找项目里的测试函数并运行。

例如:

fn add(a: i32, b: i32) -> i32 {
    a + b
}

#[test]
fn test_add() {
    assert_eq!(add(1, 2), 3);
}

运行:

cargo test

6)检查语法和类型

cargo check

这个命令很常用。

它只检查代码能不能通过编译,但不真正生成可执行文件,所以速度比 cargo build 快很多。

日常开发时经常用:

cargo check

2. Cargo.toml 是什么?

Cargo.toml 是 Cargo 项目的核心配置文件。

一个简单例子:

[package]
name = "kvstore"
version = "0.1.0"
edition = "2021"

[dependencies]
tokio = "1"
serde = "1"
serde_json = "1"

含义是:

[package]     项目自身的信息
[dependencies] 项目依赖的第三方库

如果你做 RustFS、KVStore、网络编程项目,后面经常会看到:

tokio = "1"

tokio 是 Rust 里很重要的异步运行时,类似做高并发网络服务时的基础设施。


3. Cargo.lock 是什么?

你还会看到一个文件:

Cargo.lock

它记录了当前项目实际使用的依赖版本。

比如 Cargo.toml 写:

rand = "0.8"

实际可能下载的是:

rand 0.8.5

这个精确版本会记录在 Cargo.lock 里。

作用是:

保证别人拉你的项目后,使用的依赖版本和你一致,避免“我这里能跑,你那里跑不了”。


4. 常用 Cargo 命令总结

你先记这些就够了:

cargo new 项目名        # 创建新项目
cargo build            # 编译项目
cargo build --release  # 编译发布版本
cargo run              # 编译并运行
cargo check            # 快速检查代码
cargo test             # 运行测试
cargo clean            # 清理编译产物

如果你要看项目文档:

cargo doc --open

5. Cargo 和 rustc 的关系

rustc 是 Rust 编译器。

cargo 是项目管理工具。

可以这样理解:

rustc:负责真正编译单个 Rust 文件
Cargo:负责管理整个 Rust 项目,然后调用 rustc

平时你基本不会直接用:

rustc main.rs

而是使用:

cargo build
cargo run

因为真实项目里有很多源码文件、依赖库、测试、编译配置,手动用 rustc 会非常麻烦。


6. Cargo与C++对比

C++ 项目 Rust 项目
Makefile / CMake Cargo
g++ rustc
vcpkg / 手动安装库 Cargo dependencies
CMakeLists.txt Cargo.toml
build/ target/

所以 Cargo 最大的好处是:

它把 C++ 里“建项目、写 Makefile/CMake、找库、配链接参数、管理依赖版本”这些杂活都统一处理了。

这也是 Rust 开发体验比 C/C++ 更现代的一个重要原因。

更多推荐