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 的默认配置项被预定义为发布时友好的。
从上面两个构建命令的输出中我们可以看出 dev 和 release 使用了不同的配置。
当 Cargo.toml 文件中没有做配置的时候(不包含任何 [profile.*] 部分,* 代表配置的名称),Cargo 会采用默认设置。我们可以通过修改 Cargo.toml 文件增加[profile.*]部分和相应的配置项来覆盖任意配置的相应默认设置。参考下面的例子:
opt-level 是用来设置 Rust 对代码优化的程度,从 0 到 3,值越大优化的级别越高需要的编译时间也越多。由于在开发过程中我们可能经常需要编译,可能会希望牺牲一些代码性能而获得更快的编译速度,这就是为什么 dev 的 opt-level 默认为 0。而当我们准备正式进行发布时,花费更多时间进行编译,获得更快运行的程序则更好,这就是为什么 release 配置的 opt-level 默认为 3。我们可以通过在 Cargo.toml 中设置不同的值来覆盖任何默认设置。参考下面的例子:
上面的例子将会覆盖 dev 的 opt-level 默认设置 0。此时再运行 cargo build ,Cargo 将会使用 dev 下其它配置项的默认配置加上我们自定义设置的 opt-level 来进行构建,并且由于 opt-level 被我们设置为 1,Cargo 会进行相对更多的优化。
完整的配置列表说明和相关默认值,请大家查看官方的文档。
版权声明: 本文为 InfoQ 作者【山】的原创文章。
原文链接:【http://xie.infoq.cn/article/51abb1e3fa3e15668eee1c659】。文章转载请联系作者。
评论