第1章:Cargo与项目管理
如果你刚开始接触 Rust,我建议你先忘掉编译器、忘掉语法。先认识一个人——Cargo。
Cargo 是 Rust 的包管理器和构建工具。说白了,它就是你的项目管家。我当年学 Rust 时,最让我舒服的就是 Cargo。你想想看,一个工具能帮你创建项目、管理依赖、运行测试、构建发布,几乎一条龙服务。这在其他语言里可不多见。
1.1 用 Cargo 创建项目
创建新项目很简单。打开终端,敲一行命令:
cargo new my_project
这行命令会生成一个名为 my_project 的目录。里面长这样:
my_project/
├── Cargo.toml
└── src/
└── main.rs
嗯,就两个文件。一个配置文件,一个源码文件。干净利落。
我个人习惯把项目名写成小写加下划线,比如 my_project 而不是 MyProject。Rust 社区也推荐这种命名风格。你如果用了大写字母,Cargo 会给你一个警告,但不影响运行。
--lib 参数:cargo new my_lib --lib。这样生成的 src/lib.rs 而不是 main.rs。
1.2 Cargo.toml 详解
打开 Cargo.toml,你会看到类似这样的内容:
[package]
name = "my_project"
version = "0.1.0"
edition = "2021"
[dependencies]
这个文件用的是 TOML 格式。说白了就是一种简单的配置文件语法。我来拆开讲讲:
- [package]:项目元信息。名字、版本、使用的 Rust 版本。
- edition:Rust 的版本号。目前主流是 2021。我建议新项目都用 2021,除非你有特殊原因。
- [dependencies]:依赖声明区。你项目用到的第三方库都写在这里。
我在项目中遇到过一个问题:有次我忘了写 edition 字段,结果编译时一堆奇怪的错误。后来才发现是默认用了 2015 版本,很多新语法不支持。所以,记得显式声明 edition。
1.3 依赖管理
Rust 的依赖管理,核心就是 Cargo.toml 里的 [dependencies] 部分。举个例子:
[dependencies]
serde = "1.0"
rand = "0.8"
这里声明了两个依赖:serde 和 rand。版本号用的是语义化版本(SemVer)。比如 "1.0" 表示兼容 1.0.x 的任何版本。
当你第一次运行 cargo build 时,Cargo 会去 crates.io 下载这些依赖。下载完后会生成一个 Cargo.lock 文件。这个文件锁定了所有依赖的具体版本,确保你团队里每个人用的版本都一样。
Cargo.lock 文件!我曾经手贱改过一次,结果依赖版本对不上,折腾了半天才恢复。让 Cargo 自己管理它就好。
如果你想更新依赖,可以用:
cargo update
这个命令会更新 Cargo.lock 里的版本,但不会超过 Cargo.toml 里声明的范围。
1.4 cargo build / run / check / test
这几个命令是你日常最常用的。我按使用频率给你排个序:
| 命令 | 作用 | 使用场景 |
|---|---|---|
cargo check |
检查代码能否编译,但不生成可执行文件 | 开发过程中频繁使用,速度最快 |
cargo build |
编译项目,生成可执行文件 | 需要运行或调试时 |
cargo run |
编译并运行项目 | 快速测试效果 |
cargo test |
运行项目中的测试 | 写单元测试或集成测试时 |
我个人的工作流是这样的:写代码时,隔几分钟就跑一次 cargo check。它只检查语法和类型,不生成二进制文件,所以特别快。等代码写完了,再跑 cargo build 生成最终版本。
至于 cargo test,我建议你养成习惯。每次提交代码前跑一遍测试,能省去很多后期排查的麻烦。我曾经有一次忘了跑测试就提交了,结果 CI 上挂了,被同事笑了好久。
cargo check,发布前用 cargo build --release。后者会启用优化,生成更快的代码,但编译时间更长。
知识体系总览
下面这张图帮你理清 Cargo 的核心逻辑:
这张图展示了 Cargo 的三个核心能力:创建项目、管理依赖、构建运行。三者环环相扣,构成了 Rust 项目的完整工作流。
Cargo.toml 里写错了依赖版本号,结果编译报错说找不到包。排查了半天才发现是版本号写成了 "1.0" 但实际只有 "0.9"。所以,添加依赖时最好去 crates.io 确认一下版本号。
好了,Cargo 的基础就这些。你只要记住:cargo new 创建项目,Cargo.toml 管理配置和依赖,cargo check/build/run/test 是日常四件套。把这些用熟了,Rust 项目开发就顺了。