有没有办法获得配置标志的值?例如,我想获得target_os
as 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)
...它将显示cfg
Cargo 知道的标志。这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 次 |
最近记录: |