主题
rustc / Cargo
rustc 是编译器。Cargo 是官方包管理器与构建前端,构建时调用 rustc。日常开发走 Cargo,几乎不直接调 rustc。
rustc
把 .rs 编成机器码。单独调用时只处理当前文件,不解析依赖、也不管工程布局:
bash
rustc main.rs
./main依赖库需要自行传 --extern、--edition 等参数。多文件、多 crate 时这些参数会迅速失控,所以一般不作为工程入口。
Cargo
读 Cargo.toml,解析 crates.io / git / path 依赖,再按正确参数调用 rustc。
bash
cargo new demo # 二进制包
cargo new demo --lib # 库包
cargo check # 只做类型检查,不生成可执行文件
cargo run
cargo test
cargo build --releasecargo check 对应 rustc 只发 metadata、不做完整代码生成,比 cargo build 快。--release 走优化配置,默认 cargo build / cargo run 走 dev。
| 对比 | rustc | Cargo |
|---|---|---|
| 角色 | 编译器 | 包管理 + 构建 |
| 输入 | .rs 文件 | 包(Cargo.toml) |
| 依赖 | 需自行传 --extern 等 | 自动解析并交给 rustc |
| 产物 | 当前目录的可执行文件或 .rlib | target/ |
crate 与 package
crate 是一次可编译单元:二进制入口 src/main.rs,库入口 src/lib.rs。
含 Cargo.toml 的目录是 package。一个 package 可以有一个 lib 和多个 bin。
锁文件与产物
Cargo.lock 锁定依赖的精确版本,保证复现构建。target/ 是构建产物,不进版本库。
rustup
rustup 管理工具链。rustc 和 Cargo 都由它安装;Cargo 构建时调用当前工具链里的 rustc。
