Rust学习笔记:Cargo与第三方依赖——Rust生态的正确打开方式
基础语法写完了,但真正的项目不可能从零造轮子。这一篇讲 Rust 的包管理工具 Cargo——怎么引入第三方库、版本号怎么写、Cargo.toml 怎么配。
1. Cargo.toml:项目的身份证
每个 Rust 项目根目录都有一个 Cargo.toml:
[package]
name = "my_project"
version = "0.1.0"
edition = "2021"
[dependencies]
rand = "0.8"
serde = { version = "1.0", features = ["derive"] }
三个核心段:
| 段 | 作用 |
|---|---|
[package] |
项目元数据 |
[dependencies] |
第三方依赖 |
[dev-dependencies] |
仅测试/基准测试用的依赖 |
2. 三种加依赖的方式
方式一:命令行(推荐)
cargo add rand
cargo add serde --features derive
自动更新 Cargo.toml 并下载依赖。
方式二:手动写
[dependencies]
rand = "0.8"
然后 cargo build 自动拉取。
方式三:指定来源
[dependencies]
my_local_lib = { path = "../my_lib" }
my_git_lib = { git = "https://github.com/..." }
my_crate = "0.1"
3. 版本号规则
rand = "0.8" # 兼容 0.8.x,不自动跨主版本
rand = "0.8.5" # 至少 0.8.5
rand = "*" # 任意版本(不推荐)
rand = ">=0.7, <0.9" # 精确范围
默认 "0.8" 等价于 ^0.8。cargo update 不跨主版本升级。
4. Cargo.lock:精确锁定
Cargo.toml 写需求,Cargo.lock 记录实际下载的精确版本(包括所有间接依赖)。
- 可执行项目:
Cargo.lock提交到版本控制 - 库项目:不必提交
5. 实战:引入 rand
Cargo.toml:
[dependencies]
rand = "0.8"
代码:
use rand::Rng;
let secret = rand::thread_rng().gen_range(1..=100);
println!("随机数: {secret}");
6. 国内镜像
crates.io 在国内下载很慢,需要配镜像。在 CARGO_HOME 下创建 config.toml:
[source.crates-io]
replace-with = 'rsproxy'
[source.rsproxy]
registry = "sparse+https://rsproxy.cn/index/"
sparse index(sparse+https://)比旧式 git 协议快一个量级,cargo >= 1.68 都支持。
注意:这是 cargo 的镜像,和 rustup 的镜像(RUSTUP_DIST_SERVER / RUSTUP_UPDATE_ROOT 环境变量)是两套独立的配置,各管各的。
7. 三大依赖来源对比
| 来源 | 声明方式 | 适用场景 |
|---|---|---|
| crates.io | rand = "0.8" |
公开发布的库 |
| 本地路径 | path = "../my_lib" |
自己写的、尚未发布的库 |
| Git 仓库 | git = "https://..." |
未发布到 crates.io 的库 |
总结
| 文件/命令 | 作用 |
|---|---|
Cargo.toml |
项目配置,声明依赖 |
Cargo.lock |
锁定依赖的精确版本 |
cargo add |
添加依赖 |
cargo build |
编译(自动拉取缺失依赖) |
cargo update |
按 Cargo.toml 的版本约束升级依赖 |

浙公网安备 33010602011771号