安装工具链、Cargo 与第一次运行
本章目标
这一章解决“怎么把 Rust 程序跑起来”。你会理解 rustc、cargo、rustup 分别负责什么,为什么真实项目几乎都用 Cargo,以及当前 RinBlog 项目如何启动。
它是什么
Rust 工具链通常由三层组成:
rustup:工具链管理器,负责安装、升级、切换 Rust 版本。rustc:Rust 编译器,负责把.rs源码编译成机器可执行文件。cargo:项目管理工具,负责创建项目、下载依赖、编译、测试、运行、生成文档。
你可以把它们理解成:rustup 管安装,rustc 管编译,cargo 管工程。
为什么需要
小程序可以直接运行 rustc main.rs,但真实项目会很快遇到这些问题:
- 有多个源码文件,编译顺序怎么管理。
- 需要第三方库,下载和版本锁定怎么做。
- 要跑测试,测试文件放在哪里。
- 不同机器构建结果要尽量一致。
Cargo 统一解决这些工程问题。当前项目的 Cargo.toml 声明包名、版本、edition 和依赖,Cargo.lock 记录精确依赖版本。
怎么使用
在当前项目根目录运行:
cargo run
它会做三件事:
- 读取
Cargo.toml。 - 编译
src/main.rs和依赖。 - 启动编译后的程序。
启动后访问:
http://127.0.0.1:7878
新增教材站后,访问:
http://127.0.0.1:7878/docs
逐行解释
看当前项目的 Cargo.toml:
[package]
name = "rinblog"
version = "0.1.0"
edition = "2024"
[dependencies]
pulldown-cmark = "0.13.4"
[package]是包信息区域。name = "rinblog"是项目名称,Cargo 会用它命名构建产物。version = "0.1.0"是包版本,遵循常见的语义化版本写法。edition = "2024"表示使用 Rust 2024 edition。edition 是语言演进边界,不等于编译器版本。[dependencies]是依赖区域。pulldown-cmark = "0.13.4"表示使用这个 crate 来渲染 Markdown。
当你运行 cargo test,Cargo 会编译测试版本并执行 #[test] 函数。当你运行 cargo check,Cargo 只做类型检查和借用检查,不生成最终可执行文件,因此速度通常更快。
常见坑
cargo run要在含有Cargo.toml的项目根目录执行。Cargo.lock对应用程序应该提交,因为它保证依赖版本可复现。- 安装了 Rust 不等于终端能找到它。若命令不存在,检查环境变量或重新打开终端。
cargo clean会删除构建产物,通常只在构建缓存异常或需要释放空间时使用。
练习
- 运行
cargo check,确认项目能通过检查。 - 运行
cargo test,观察测试输出。 - 打开
target/debug,看看构建产物在哪里。 - 修改
Cargo.toml的包名,再运行cargo check,观察 Cargo 输出变化。
造轮子任务
写一个最小命令行程序,接收源码中硬编码的项目名并打印“项目已启动”。然后分别用 cargo run 和 cargo build 体验“运行”和“只构建”的区别。
小结
cargo 是 Rust 工程的入口。你不需要一开始记住所有命令,但要熟悉 cargo run、cargo check、cargo test。它们会贯穿本书的每个阶段。