2017-04-16 16 views
5

Czy istnieje sposób uzyskania wartości configuration flag? Na przykład chciałbym uzyskać wartość target_os jak str/String, bez uciekania się do poniższego if-else-if łańcucha:Jak uzyskać wartość flagi konfiguracji?

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

Ten problem może być istotny: https://github.com/rust-lang/rust/issues/48823 –

Odpowiedz

4

Nie można dostać trochę z nich przez oszukiwanie Cargo pod informacją. Jeśli umieścić następujące do build script:

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

... to będzie wyświetlać cfg flagi ładunek jest świadomy. panic! jest właśnie tam, jako łatwy sposób, aby Cargo pokazywał wynik zamiast go ukrywać. Dla porównania, wynik ten produkuje wygląda następująco:

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. 

Można wyodrębnić wartości, które Cię interesują z tej listy, i zrzucić je do wygenerowanego pliku źródłowym, który można następnie import (lub używając #[path]include!) do źródła twojego paczki.

Powiązane problemy