2017-04-16 20 views
5

configuration flagの値を取得する方法はありますか?例えば、私は次のif-else-ifチェーンに頼ることなく、str/Stringとしてtarget_osの値を取得したいと思います:設定フラグの値を取得する方法は?

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

この問題は関連する場合があります。https://github.com/rust-lang/rust/issues/48823 –

答えて

4

いいえあなたはあなたを伝えるに貨物をだましてそれらの一部を得ることができます。あなたは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"); 
} 

...それは貨物が認識しているcfgのフラグが表示されます。 panic!は、Cargoに実際に出力を隠す代わりに実際に表示させる簡単な方法です。参考のため、これが生成する出力は次のようになります。

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. 

あなたはこのリストから興味のある値を抽出し、そしてあなたが(#[path]かを、インポート使用することができます生成されたソース・ファイル、それらをダンプすることができますinclude!)をパッケージのソースに追加します。

関連する問題