update cargo profile

pull/457/head
sunface 3 years ago
parent 40e2d2f060
commit bb9fc46a06

@ -45,6 +45,15 @@ cargo build --profile release-lto
与默认的 profile 相同,自定义 profile 的编译结果也存放在 [`target/`](https://course.rs/cargo/guide/build-cache.html) 下的同名目录中,例如 `--profile release-lto` 的输出结果存储在 `target/release-lto` 中。
## 选择 profile
- 默认使用 `dev` : `cargo build`, `cargo rustc`, `cargo check`, 和 `cargo run`
- 默认使用 `test`: `cargo test`
- 默认使用 `bench`: `cargo bench`
- 默认使用 `release` `cargo install`, `cargo build --release`, `cargo build --release`
- 使用自定义 profile: `cargo build --profile release-lto`
## profile设置
下面我们来看看 profile 中可以进行哪些优化设置。
@ -213,6 +222,43 @@ opt-level = 0
codegen-units = 256
```
如果是自定义 profile那它会自动从当前正在使用的 profile 继承相应的设置,且不会修改。
如果是自定义 profile那它会自动从当前正在使用的 profile 继承相应的设置,但不会修改。
## 重写profile
我们还可以对特定的包使用的 profile 进行重写(override):
```toml
# `foo` package 将使用 -Copt-level=3 标志.
[profile.dev.package.foo]
opt-level = 3
```
这里的 `package` 名称实际上是一个 [`Package ID`](https://course.rs/cargo/reference/package-id.html),因此我们还可以通过版本号来选择: `[profile.dev.package."foo:2.1.0"]`
如果要为所有依赖包重写(不包括工作空间的成员):
```toml
[profile.dev.package."*"]
opt-level = 2
```
为构建脚本、过程宏和它们的依赖重写:
```toml
[profile.dev.build-override]
opt-level = 3
```
> 注意:如果一个依赖同时被正常代码和构建脚本所使用,当 `--target` 没有指定时Cargo 只会构建该依赖一次。
>
> 但是当使用了 `build-override` 后,该依赖会被构建两次,一次为正常代码,一次为构建脚本,因此会增加一些编译时间
重写的优先级按以下顺序执行(第一个匹配获胜):
- `[profile.dev.package.name]`,指定名称进行重写
- `[profile.dev.package."*"]`,对所有非工作空间成员的 package 进行重写
- `[profile.dev.build-override]`,对构建脚本、过程宏及它们的依赖进行重写
- `[profile.dev]`
- Cargo 内置的默认值
重写无法使用 `panic`、`lto` 或 `rpath` 设置。

Loading…
Cancel
Save