如何获取配置标志的值?

s3r*_*vac 5 rust

有没有办法获得配置标志的值?例如,我想获得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)

DK.*_*DK. 7

不。您可以通过欺骗 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_familytarget_arch, 中都有相应的&str常数std::env::consts::{OS, FAMILY, ARCH}