使用不同发布配置文件,对构建进行定制

Customizing Builds with Release Profiles

在 Rust 中,所谓 发布配置文件,release profiles,是带有实现程序员对编译代码有着更多掌控的,一些预定义及可定制的配置文件。相对其他配置文件,每个配置文件都是被独立配置的。

Cargo 有两个主要发布配置文件:运行 cargo build 时 Cargo 用到的 dev 配置文件,与运行 cargo build --release 时 Cargo 用到的 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

其中 devrelease,即由编译器用到的不同配置文件。

Cargo 有着在咱们在项目的 Cargo.toml 文件中,未曾显式添加任何 [profile.*] 小节时,所适用的各个配置文件的默认设置。通过添加咱们打算定制的任何配置文件的 [profile.*] 小节,咱们就会覆盖掉默认设置的任何子集。比如,下面是 devrelease 配置文件中 opt-level 设置的默认值:

文件名:Cargo.toml

[profile.dev]
opt-level = 0

[profile.release]
opt-level = 3

这个 opt-level 设置项,控制了 Rust 将应用到咱们代码的优化数目,有着范围 03 的取值范围。应用更多优化会延长编译时间,因此若咱们是在开发过程中而频繁编译代码,那么即使产生出的代码运行较慢,咱们也会想要更少的优化来更快地编译。因此默认的 opt-level 就是 0。而在咱们已准备好发布咱们的代码时,那么就最好用更多时间来编译。咱们将只以发布模式编译一次,但会运行编译好的程序许多次,因此发布模式就以较长的编译时间,换取到运行较快的代码。那就是 release 配置文件的 opt-level 默认为 3 的原因。

通过在 Cargo.toml 中,给某个默认值添加不同的值,就可以覆盖掉这个默认值。比如,在打算于开发配置文件中使用优化级别 1 时,就可以把下面这两行,添加到项目的 Cargo.toml

文件名:Cargo.toml

[profile.dev]
opt-level = 1

此代码会覆盖默认设置 0。现在当咱们运行 cargo build 时,Cargo 将使用 dev 配置文件的默认设置,加上咱们对 opt-level 的定制。由于咱们把 opt-level 设置为了 1,Cargo 将应用相比于默认设置更多,但不如发布构建那样多的优化。

对于各个配置文件的完整配置项清单与默认设置,请参阅 Cargo 文档

Last change: 2023-12-01, commit: 6fc28b5