2017-04-16 3 views
5

Gibt es eine Möglichkeit, den Wert eines configuration flag zu erhalten? Zum Beispiel würde Ich mag den Wert von target_os als str/String bekommen, ohne auf die folgende if-else-if Kette zurückgreifen:Wie erhalte ich den Wert eines Konfigurations-Flags?

if cfg!(target_os = "windows") { 
    "windows" 
} else if cfg!(target_os = "linux") { 
    "linux" 
// ... 
} else { 
    "unknown" 
} 
+1

Möglicherweise finden Sie dieses Problem relevant: https://github.com/rust-lang/rust/issues/48823 –

Antwort

4

Nein, Sie einige von ihnen Sie von trickst Fracht in erzählen bekommen. Wenn Sie das folgende in einen build script platzieren:

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"); 
} 

... wird es die cfg Flaggen angezeigt Fracht bewusst ist. Die panic! ist nur da als eine einfache Möglichkeit, Cargo zu bekommen, um die Ausgabe tatsächlich zu zeigen, anstatt sie zu verstecken. Als Referenz sieht die Ausgabe erzeugt dies wie folgt aus:

Compiling dump-cfg v0.1.0 (file:///F:/Programming/Rust/sandbox/cargo-test/dump-cfg) 
error: failed to run custom build command for `dump-cfg v0.1.0 (file:///F:/Programming/Rust/sandbox/cargo-test/dump-cfg)` 
process didn't exit successfully: `F:\Programming\Rust\sandbox\cargo-test\dump-cfg\target\debug\build\dump-cfg-8b04f9ac3818f82a\build-script-build` (exit code: 101) 
--- stdout 
CARGO_CFG_TARGET_POINTER_WIDTH: "64" 
CARGO_CFG_TARGET_ENV: "msvc" 
CARGO_CFG_TARGET_OS: "windows" 
CARGO_CFG_TARGET_ENDIAN: "little" 
CARGO_CFG_TARGET_FAMILY: "windows" 
CARGO_CFG_TARGET_ARCH: "x86_64" 
CARGO_CFG_TARGET_HAS_ATOMIC: "16,32,64,8,ptr" 
CARGO_CFG_TARGET_FEATURE: "sse,sse2" 
CARGO_CFG_WINDOWS: "" 
CARGO_CFG_TARGET_VENDOR: "pc" 
CARGO_CFG_DEBUG_ASSERTIONS: "" 

--- stderr 
thread 'main' panicked at 'stop', build.rs:9 
note: Run with `RUST_BACKTRACE=1` for a backtrace. 

Sie können die Werte extrahieren Sie aus dieser Liste interessiert sind, und steckt sie in eine generierte Quelldatei, die Sie dann importieren (mit #[path] oder include!) in die Quelle Ihres Pakets.

Verwandte Themen