trpl-zh-cn/src/ch14-01-release-profiles.md
2023-09-29 15:07:58 +08:00

2.8 KiB
Raw Blame History

采用发布配置自定义构建

ch14-01-release-profiles.md
commit 44e31f9f304e0cd9ace01045d17a2aa01a449528

在 Rust 中 发布配置release profiles)文件是预定义和可定制的,它们包含不同的配置,允许程序员更灵活地控制代码编译的多种选项。每一个配置都相互独立。

Cargo 有两个主要的配置:运行 cargo build 时采用的 dev 配置和运行 cargo build --releaserelease 配置。dev 配置为开发定义了良好的默认配置,release 配置则为发布构建定义了良好的默认配置。

这些配置名称可能很眼熟,因为它们出现在构建的输出中:

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

构建输出中的 devrelease 表明编译器在使用不同的配置。

当项目的 Cargo.toml 文件中没有显式增加任何 [profile.*] 部分的时候Cargo 会对每一个配置都采用默认设置。通过增加任何希望定制的配置对应的 [profile.*] 部分,我们可以选择覆盖任意默认设置的子集。例如,如下是 devrelease 配置的 opt-level 设置的默认值:

文件名Cargo.toml

[profile.dev]
opt-level = 0

[profile.release]
opt-level = 3

opt-level 设置控制 Rust 会对代码进行何种程度的优化。这个配置的值从 0 到 3。越高的优化级别需要更多的时间编译所以如果你在进行开发并经常编译可能会希望在牺牲一些代码性能的情况下减少优化以便编译得快一些。因此 devopt-level 默认为 0。当你准备发布时,花费更多时间在编译上则更好。只需要在发布模式编译一次,而编译出来的程序则会运行很多次,所以发布模式用更长的编译时间换取运行更快的代码。这正是为什么 release 配置的 opt-level 默认为 3

我们可以选择通过在 Cargo.toml 增加不同的值来覆盖任何默认设置。比如,如果我们想要在开发配置中使用级别 1 的优化,则可以在 Cargo.toml 中增加这两行:

文件名Cargo.toml

[profile.dev]
opt-level = 1

这会覆盖默认的设置 0。现在运行 cargo buildCargo 将会使用 dev 的默认配置加上定制的 opt-level。因为 opt-level 设置为 1Cargo 会比默认进行更多的优化,但是没有发布构建那么多。

对于每个配置的设置和其默认值的完整列表,请查看 Cargo 的文档