讲解
rustc 能直接编译单个 .rs 文件(rustc main.rs 就生成可执行文件),但真实项目从来不用这种方式——一切交给 Cargo。Cargo 是 Rust 的构建工具兼包管理器,职责覆盖:创建项目骨架、编译(自动调用 rustc)、下载和锁定依赖、运行、测试、发布包。学 Cargo 的命令比学 rustc 的参数重要得多。
日常高频命令只有六个:cargo new 名字 创建新项目;cargo build 编译(开发模式,快但不优化);cargo run 编译并运行(开发期最常用);cargo check 只检查能否编译、不生成二进制(最快,写代码时随手一敲);cargo test 跑测试(第 25 章专题);cargo build --release 发布模式编译(开优化,慢但产物快得多)。
Cargo 项目的目录约定是固定的:根目录的 Cargo.toml 是清单文件,记录包名、版本、edition 和依赖列表;src/main.rs 是可执行程序的入口(库项目则是 src/lib.rs);编译产物全部进 target/ 目录(cargo new 会自动生成 .gitignore 把它排除)。记住这个约定,任何 Rust 项目拿到手都不会迷路。
示例
src/main.rs 的初始内容(cargo new 自动生成,就是熟悉的 hello world):
fn main() {
println!("Hello, world!");
}
创建项目并看看 Cargo 生成了什么(本教程构建时真实执行):
cargo new hello
cat hello/Cargo.toml
cat hello/src/main.rs
Cargo.toml 是项目的清单。把这一份写进沙盒里的项目(file: 标记会让本教程的构建脚本真的写入该文件):
# file: hello/Cargo.toml
[package]
name = "hello"
version = "0.1.0"
edition = "2021"
[dependencies]
[dependencies] 一节现在是空的——本教程全程只用标准库,不引第三方包。编译并运行,再试试发布模式:
cd hello
cargo run
cargo build --release
./target/release/hello
cargo run 的输出里,前几行是编译日志(Compiling、Finished),最后一行才是程序自己的输出 Hello, world!;第二次运行如果没有代码变更,编译会被跳过,直接看到输出。
常见坑
- 在项目外运行 cargo run:Cargo 靠当前目录的 Cargo.toml 定位项目,在父目录敲会报 could not find Cargo.toml——先 cd 进项目。
- 分不清 check 和 build:cargo check 只验证「能不能编译」,速度最快但不产出可执行文件;要运行还得 cargo run 或 build。
- 把 target/ 提交进 Git:它是纯编译产物,体积轻松上百 MB。cargo new 生成的 .gitignore 已排除,别手动删掉那行。
- 线上性能慢却用开发模式测:开发模式不做优化,性能数字没有意义;测性能、发部署一律 --release。
小结
Cargo 是 Rust 项目的指挥中心:new 建项目、run 跑、check 快速检查、build --release 出发布产物;约定 Cargo.toml + src/main.rs + target/。下一章进入语言本身:变量与可变性。