第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"

这里声明了两个依赖:serderand。版本号用的是语义化版本(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 项目管理 cargo new Cargo.toml build / run / check / test src/main.rs Cargo.lock target/ 目录 Cargo 帮你管理项目生命周期 从创建到发布,一条龙服务

这张图展示了 Cargo 的三个核心能力:创建项目、管理依赖、构建运行。三者环环相扣,构成了 Rust 项目的完整工作流。

避坑指南: 我曾经在 Cargo.toml 里写错了依赖版本号,结果编译报错说找不到包。排查了半天才发现是版本号写成了 "1.0" 但实际只有 "0.9"。所以,添加依赖时最好去 crates.io 确认一下版本号。

好了,Cargo 的基础就这些。你只要记住:cargo new 创建项目,Cargo.toml 管理配置和依赖,cargo check/build/run/test 是日常四件套。把这些用熟了,Rust 项目开发就顺了。

专注资料整理