cfg
可以通过两种不同的运算符进行配置条件检查
cfg
属性:属性位置的#[cfg(...)]
cfg!
宏:布尔表达式中的cfg!(...)
前者启用条件编译,而后者有条件地计算为 true
或 false
字面量,允许在运行时进行检查。两者都使用相同的参数语法。
与 #[cfg]
不同,cfg!
不会删除任何代码,只会计算为 true 或 false。例如,当使用 cfg!
作为条件时,if/else 表达式中的所有块都需要有效,而不管 cfg!
的计算结果是什么。
// This function only gets compiled if the target OS is 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 #[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!"); } }