十二、Rust 项目工具
1. 项目配置
-
两个环境:
dev与release -
配置的位置:
Cargo.toml文件 -
配置项:
[profile.dev]与[profile.release] -
配置示例:
# 覆盖默认的开发配置 [profile.dev] opt-level = 0 # 控制 rust 对代码的优化程度。取值:0,1,2,3。值越大,优化程度越高,编译时间越久 # 覆盖默认的发布配置 [profile.release] opt-level = 3 -
完整的配置列表,请查看 Cargo 文档
2. 发布 crate
- 文档注释
- 注释风格
- 常规文档注释:
/// - 包含注释的注释:
//!
- 常规文档注释:
- 支持 Markdown 标记
- 打开文档:
cargo doc --open - 常用的文档注释块
Examples: 提供这个函数的有效示例cargo test也会运行示例代码!
Panics: 提供这个函数可能panic!的场景Errors: 提供这个函数可能暴露什么错误,以及出现对应错误的原因Safety: 提供期望函数调用者支持的、确保unsafe块中代码正常工作的不变条件
- 注释风格
- 发布开源 crate
- 推送新版本:
cargo publish - 撤回某个版本:
cargo yank --vers x.y.z - 撤销某个撤回:
cargo yank --vers x.y.z --undo
- 推送新版本:
3. workspace
-
类似于 Web 前端的 monorepo
-
cargo workspace
- 一系列共享同样的 Cargo.lock 和输出目录的包的集合
- 即:虽然有多个 Cargo.toml 文件,但只有根目录下的一个 Cargo.lock 文件
- 一系列共享同样的 Cargo.lock 和输出目录的包的集合
-
创建步骤
-
首先创建这个 workspace 的根目录
-
然后在这个根目录下的
Cargo.toml文件中指定[members] -
最后再通过在根目录下执行
cargo new <lib-name>来创建members里的库# Cargo.toml 文件 [workspace] members = [ "adder", "add-one", ]
-
-
一些特性
-
workspace内的库可以相互依赖,可以按如下示例引入# adder/Cargo.toml # 引入同一个 workspace 下的依赖 [dependencies] add-one = { path = "../add-one" } -
同一个
workspace下的库,如果多个库依赖了相同的一个外部 crate,那么 Cargo 会将其都解析为同一版本并记录到唯一的 Cargo.lock 中
-
-
运行指定的 crate 的测试用例:
cargo test -p <lib-name>
4. cargo 扩展包
- 安装依赖
- 安装命令:
cargo install - 默认安装路径:
$HOME/.cargo/bin
- 安装命令:
- 自定义命令
- 如果环境变量
$PATH中有类似cargo-something的二进制文件,就可以通过cargo something来像 Cargo 子命令一样运行它- 这样的自定义命令也可以用
cargo --list列出来
- 这样的自定义命令也可以用
- 如果环境变量