default 是否可以使功能列表依赖于您的平台Cargo.toml?我想使用功能来选择依赖于平台的依赖项。
我会想象这样的事情:
[features]
# on Unix
default = ["feature-a"]
# not on Unix
default = ["feature-b"]
feature-a = ["dep-a"]
feature-b = ["dep-b"]
[dependencies]
dep-a = { version = "*", optional = true }
dep-b = { version = "*", optional = true }
Run Code Online (Sandbox Code Playgroud)
我试过了:
使用[target.'cfg(unix)'.features]不起作用,它被忽略:
[target.'cfg(unix)'.features]
default = ["feature-a"]
# -- snip --
Run Code Online (Sandbox Code Playgroud)
使用build.rs脚本根据cfg条件启用功能只能部分起作用。依赖关系解析是在运行之前完成的build.rs,因此这不会导入其中启用的功能的可选依赖关系。此示例不会导入dep-a:
fn main() {
#[cfg(unix)]
println!("cargo:rustc-cfg=feature=\"feature-a\"");
// -- snip --
}
Run Code Online (Sandbox Code Playgroud)
这可以在 Rust …
-C target-cpu=native 当标志传递给时,我正在编写的程序运行得更快rustc。我想为用户提供一种简单的、独立于平台的方式来在编译时启用此功能,因此我cpu_native = []在 Cargo.toml 中添加了 Cargo 功能,并在我的项目中创建了这个 Cargo 配置:
[target.'cfg(cpu_native)']
rustflags = ["-C", "target-cpu=native"]
Run Code Online (Sandbox Code Playgroud)
然而,这对我的程序没有影响,传递--features cpu_native给 Cargo 甚至不会触发重新编译。更改为以下 Cargo 配置确实会强制使用更快的指令重新编译:
[build]
rustflags = ["-C", "target-cpu=native"]
Run Code Online (Sandbox Code Playgroud)
然而,这将target-cpu=native使用默认的 Cargo 功能进行编译,这不是我想要的。从货物书中,我想要的似乎是可能的,但我不明白我做错了什么。