Cargo 详解 - 检查条件配置
本文旨在总结 Cargo 与 unexpected_cfgs
lint 和 --check-cfg
标志交互的主要方式。它不提供各个细节,详情请参考--check-cfg
文档和Cargo 手册。
Cargo 功能
有关详细信息,请参阅Cargo 手册中的 [features]
部分。
通过 [features]
表,Cargo 提供了一种表达条件编译和可选依赖项的机制。Cargo 会自动为每个 feature 声明相应的 cfg,正如预期。
Cargo.toml
:
[features]
serde = ["dep:serde"]
my_feature = []
[lints.rust]
表中的 check-cfg
有关详细信息,请参阅Cargo 手册中的 [lints]
部分。
当使用静态已知的自定义配置(即不依赖于构建脚本)时,Cargo 在 [lints.rust.unexpected_cfgs]
下提供了自定义 lint 配置 check-cfg
。
它可用于设置自定义的静态--check-cfg
参数,当预期 cfg 列表提前已知时,它非常有用。
Cargo.toml
:
[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(has_foo)'] }
build.rs
/构建脚本的 cargo::rustc-check-cfg
有关详细信息,请参阅Cargo 手册中的 cargo::rustc-check-cfg
部分。
当使用 cargo::rustc-cfg
设置自定义配置时,Cargo 提供了必然的结果指令:cargo::rustc-check-cfg
,用于期望自定义配置。
build.rs
:
fn main() {
println!("cargo::rustc-check-cfg=cfg(has_foo)");
// ^^^^^^^^^^^^^^^^^^^^^^ new with Cargo 1.80
if has_foo() {
println!("cargo::rustc-cfg=has_foo");
}
}