Cargo 基础
你会学到什么
- Cargo 同时负责构建、运行、测试和依赖管理。
Cargo.toml描述 package 的元数据。cargo check比完整构建更适合频繁验证。
最小示例
一个最小 Cargo 项目通常包含:
Cargo.toml
src/
main.rs
Cargo.toml 的核心字段:
[package]
name = "rt_01_cargo_project"
version = "0.1.0"
edition = "2024"
运行代码
cd examples
cargo run -p rt_01_cargo_project
cargo test -p rt_01_cargo_project
代码讲解
Cargo 的几个常用命令:
cargo check:只做类型检查和借用检查,不生成最终二进制。cargo build:构建项目。cargo run:构建并运行二进制。cargo test:运行单元测试、集成测试和文档测试。cargo fmt:格式化代码。cargo clippy:运行 lint。
本仓库的 examples/ 是一个 workspace。每个示例是独立 package,但可以用统一命令一起校验。
常见错误
在仓库根目录直接运行 cargo run 会失败,因为根目录不是 Cargo package。示例命令要进入 examples/,或者显式传入 --manifest-path examples/Cargo.toml。
练习
- 执行
cargo check -p rt_01_cargo_project。 - 打开示例的
Cargo.toml,确认edition = "2024"。
小结
Cargo 是 Rust 日常开发入口。后续示例都会通过 Cargo 验证。
下一步
下一章进入基础语法:变量、可变性和 shadowing。
完整示例代码
下面是 examples/01_cargo_project/ 的完整源码。无需 clone 仓库,直接在页面上阅读、复制、对照运行。
examples/01_cargo_project/src/main.rs
#[derive(Debug, PartialEq, Eq)]
struct PackageInfo {
name: &'static str,
edition: &'static str,
}
impl PackageInfo {
fn summary(&self) -> String {
format!("package {} uses Rust {} Edition", self.name, self.edition)
}
}
fn default_package() -> PackageInfo {
PackageInfo {
name: "rt_01_cargo_project",
edition: "2024",
}
}
fn main() {
let package = default_package();
println!("{}", package.summary());
println!("cargo check / build / run / test use the same package metadata.");
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn package_summary_uses_metadata() {
assert_eq!(
default_package().summary(),
"package rt_01_cargo_project uses Rust 2024 Edition",
);
}
} examples/01_cargo_project/Cargo.toml
[package]
name = "rt_01_cargo_project"
version.workspace = true
edition.workspace = true
publish.workspace = true