cfg
環境に応じたコンパイルをするには2種類の方法があります。
cfg
アトリビュート:#[cfg(...)]
をアトリビュートとして使用する。cfg!
マクロ:cfg!(...)
をブーリアンとして評価する。
前者は条件付きコンパイルを行いますが、後者はtrue
またはfalse
リテラルに評価され実行時にチェックすることが可能です。
いずれの場合も適切なシンタックスで記述する必要があります。
#[cfg]
と異なり、cfg!
はコードを削除せず、trueまたはfalseに評価されるだけです。
例えば、cfg!
が何を評価しているかに関係なく、cfg!
が条件に利用されるとき、if/else式の中のすべてのブロックが有効でなくてはなりません。
// This function only gets compiled if the target OS is linux // この関数はターゲットOSがLinuxの時のみコンパイルされる。 #[cfg(target_os = "linux")] fn are_you_on_linux() { println!("You are running linux!"); } // And this function only gets compiled if the target OS is *not* linux // そしてこの関数はターゲットOSがLinux *ではない* ときのみコンパイルされる。 #[cfg(not(target_os = "linux"))] fn are_you_on_linux() { println!("You are *not* running linux!"); } fn main() { are_you_on_linux(); println!("Are you sure?"); if cfg!(target_os = "linux") { println!("Yes. It's definitely linux!"); } else { println!("Yes. It's definitely *not* linux!"); } }
参照
参照(reference
), cfg!
, マクロ.