自定义构建
release profile
- 是可预定义的
- 可自定义:可以使用不同的配置,对代码编译拥有更多的控制
- 每个
profile
的配置都独立于其他的profile
cargo
中主要有两个profile:
Dev profile
:适用于开发cargo build
Release profile
:适用于发布,cargo build --release
自定义profile
在 Cargo.toml
里添加[profile.dev]
区域,可以覆盖默认配置
//Cargo.toml
[package]
name = "minigrep"
version = "0.1.0"
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
// 自定义profile
[profile.dev]
opt-level = 0
[profile.release]
opt-level = 3
opt-level:在Rust编译的时候对代码执行哪种程度的优化,通常发布版本的时候做到最大的优化 值越大优化越大,相对应也会有更长的编译时间
更多配置项查看官方文档: https://doc.rust-lang.org/cargo/
发布Crate
生成文档
- 文档注释通过三斜杠
///
完成 - 运行命令
cargo doc --open
生成文档,并且在浏览器中打开文档 - 常用章节
- Example:使用的例子
- Paincs:函数可能会发生panic的场景
- Errors:函数返回Result,描述可能的错误种类,以及导致错误的原因
- Safety:如果函数处于unsafe调用,就要解释函数unsafe的原因
/// let n = 32; /// let c = get_fn_name(); /// ```/// 这是一个文档注释,支持md格式
///
/// # Example (章节,除了Example之外还有上面的常用章节)
///
<a name="yY1qC"></a>
### 文档注释作为测试
注释中的示例代码块(Example),**可以用作测试用例**
<a name="ObkyA"></a>
### pub use导出
避免层层嵌套的导入方式。
```rust
// lib.rs
pub use self::kind::PrimaryColor;
// main.rs
use art::kinds::PrimaryColor; //没有使用pub use之前需要这样导入
use art::PrimaryColor; // 使用pub use之后就可以直接这样导入,避免嵌套
fn main(){
let red = PrimaryColor::Red;
}
工作空间
为什么需要工作空间?
当一个项目变得很复杂的时候,往往会产生很多文件,这时候为了方便管理就需要来给各个不同职责的文件分配工作空间。
创建工作空间
有多种方式来组件工作空间
来举一个例子:
1个二进制crate
,2个库crate
- 二进制
crate
:main函数,依赖于其他两个库crate
(adder文件夹) - 一个库
crate
提供add_one
函数(add_one文件夹) - 另外一个库
crate
提供add_two
函数(add_two文件夹)可以结合
swc
的源码中的目录结构和工作空间来看:https://github.com/swc-project/swc/blob/main/Cargo.toml
(目录结构)
// Cargo.toml
[workspace]
members =[
"adder",
"add-one",
]
// ./adder/Cargo.toml
[package]
name = "adder"
version = "0.1.0"
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
add-one = { path = "../add-one" } // 因为我们需要在adder中使用库add-one的函数,所以需要在这里指明依赖关系
其中adder
是我们需要运行的主文件。当我们执行cargo build
时会将所有的包编译到最外层的target
中。
如果想执行adder
中的文件只需要执行cargo run -p adder
即可。
二进制crate
- 命令
cargo install
- 只能安装二进制目标的crate
二进制目标(binary target)是一个可运行的程序
- 由拥有
src/main.rs
或者其他被指定为为进制文件的crate生成与二进制目标相对的还有一个库目标(libary target)由库crate生成