写点什么

Rust 从 0 到 1-Cargo- 自定义构建

用户头像
关注
发布于: 18 小时前
Rust从0到1-Cargo-自定义构建

目前为止我们只使用过 Cargo 的一些最基础的功能,即构建、运行和测试我们的代码,它还包括很多其它功能。本章将会讨论其中一部分,包括:

  • 通过配置来自定义构建(build)

  • 将 crate 发布到 crates.io

  • 使用工作空间来组织大型项目

  • 从 crates.io 获取和安装 binary crates

  • 扩展 Cargo 实现自定义命令

当然,Cargo 的功能不止这些,要了解其全部的功能,请查看 Rust 的官方文档。下面我们首先来介绍如何自定义构建时的选项。

在 Rust 中构建的配置项(release profiles)拥有默认的值,并且可以通过配置文件进行修改,这样我们就可以获得对代码编译过程一定的控制能力。并且每个配置(这个指不同构建目标的配置,如下文的 dev 和 release )是相互独立的。

Cargo 有两个主要的配置:运行 cargo build 时采用的 dev 配置和运行 cargo build --release 的 release 配置。dev 的默认配置项被预定义为开发时友好的,release 的默认配置项被预定义为发布时友好的。

$ cargo build    Finished dev [unoptimized + debuginfo] target(s) in 0.0s$ cargo build --release    Finished release [optimized] target(s) in 0.0s
复制代码

从上面两个构建命令的输出中我们可以看出 dev 和 release 使用了不同的配置。

当 Cargo.toml 文件中没有做配置的时候(不包含任何 [profile.*] 部分,* 代表配置的名称),Cargo 会采用默认设置。我们可以通过修改 Cargo.toml 文件增加[profile.*]部分和相应的配置项来覆盖任意配置的相应默认设置。参考下面的例子:

[profile.dev]opt-level = 0
[profile.release]opt-level = 3
复制代码

opt-level 是用来设置 Rust 对代码优化的程度,从 0 到 3,值越大优化的级别越高需要的编译时间也越多。由于在开发过程中我们可能经常需要编译,可能会希望牺牲一些代码性能而获得更快的编译速度,这就是为什么 dev 的 opt-level 默认为 0。而当我们准备正式进行发布时,花费更多时间进行编译,获得更快运行的程序则更好,这就是为什么 release 配置的 opt-level 默认为 3。我们可以通过在 Cargo.toml 中设置不同的值来覆盖任何默认设置。参考下面的例子:

[profile.dev]opt-level = 1
复制代码

上面的例子将会覆盖 dev 的 opt-level 默认设置 0。此时再运行 cargo build ,Cargo 将会使用 dev 下其它配置项的默认配置加上我们自定义设置的 opt-level 来进行构建,并且由于 opt-level 被我们设置为 1,Cargo 会进行相对更多的优化。

完整的配置列表说明和相关默认值,请大家查看官方的文档。

发布于: 18 小时前阅读数: 3
用户头像

关注

公众号"山 顽石"欢迎大家关注;) 2021.03.23 加入

IT老兵,关注Rust、Java、前端、架构、大数据、AI、算法等;平时喜欢美食、旅游、宠物、健身、篮球、乒乓球等。希望能和大家交流分享。

评论

发布
暂无评论
Rust从0到1-Cargo-自定义构建