有没有办法获得配置标志的值?例如,我想获得target_osas str/ 的值String,而不是求助于以下if-else-if链:
if cfg!(target_os = "windows") {
"windows"
} else if cfg!(target_os = "linux") {
"linux"
// ...
} else {
"unknown"
}
Run Code Online (Sandbox Code Playgroud)
不。您可以通过欺骗 Cargo 告诉您来获得其中一些。如果将以下内容放入构建脚本中:
use std::env;
fn main() {
for (key, value) in env::vars() {
if key.starts_with("CARGO_CFG_") {
println!("{}: {:?}", key, value);
}
}
panic!("stop and dump stdout");
}
Run Code Online (Sandbox Code Playgroud)
...它将显示cfgCargo 知道的标志。这panic!只是让 Cargo 真正显示输出而不是隐藏输出的简单方法。作为参考,生成的输出如下所示:
use std::env;
fn main() {
for (key, value) in env::vars() {
if key.starts_with("CARGO_CFG_") {
println!("{}: {:?}", key, value);
}
}
panic!("stop and dump stdout");
}
Run Code Online (Sandbox Code Playgroud)
您可以从此列表中提取您感兴趣的值,并将它们转储到生成的源文件中,然后可以将其导入(使用#[path]或include!)到包的源中。
小智 5
对于target_os具体而言,以及对于target_family和target_arch, 中都有相应的&str常数std::env::consts::{OS, FAMILY, ARCH}。
| 归档时间: |
|
| 查看次数: |
433 次 |
| 最近记录: |