私が続いてきたかなりの文書をしようとした例を再利用しますが、私は仕事に私のコードを取得することはできません。
私のCargo.tomlは次のようになります。
[package]
name = "Blahblah"
version = "0.3.0"
authors = ["ergh <[email protected]"]
[dependencies]
[[bin]]
name = "target"
path = "src/main.rs"
[features]
default=["mmap_enabled"]
no_mmap=[]
mmap_enabled=[]
cargo build
コマンドに渡す機能構成に基づいて、mmapとは異なるバッファーオリジンを使用してコードをローカルでテストしたいと思います。私は私のコードにこれを持っています:
if cfg!(mmap_enabled) {
println!("mmap_enabled bro!");
...
}
if cfg!(no_mmap) {
println!("now it's not");
...
}
コンパイラーはどちらのif
ステートメント本体にもコードを認識しないため、両方のcfg!
ステートメントがfalseと評価されていることがわかります。どうして?
Rust 0.10で条件付きコンパイルを読みましたか?機能する例を探しているので、完全に重複しているわけではないことはわかっています。
機能をテストする正しい方法はfeature = "name"
、少しスクロールするとリンクしたドキュメントでわかるように、です。
これらのスイッチを有効または無効にする方法については、Cargoを使用している場合は、次の
[features]
セクションで設定されますCargo.toml
。[features] # no features by default default = [] # Add feature "foo" here, then you can use it. # Our "foo" feature depends on nothing else. foo = []
これを行うと、Cargoはフラグを
rustc
次のように渡します。--cfg feature="${feature_name}"
これらの
cfg
フラグの合計により、どのフラグがアクティブ化されるか、したがってどのコードがコンパイルされるかが決まります。このコードを見てみましょう:#[cfg(feature = "foo")] mod foo { }
cfg!
マクロを使用する場合、これはにマップされcfg!(feature = "foo")
ます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加