Rust的条件编译允许根据不同的条件(如目标平台、特性标志等)在编译时选择性地包含或排除代码。主要通过#[cfg]
属性和cfg!
宏实现。
1. #[cfg(…)] 属性
在不同的操作系统上会编译不同的函数,会直接移除不匹配的代码:
#[cfg(target_os = "linux")]
fn get_os_info(){
println!("linux");
}
#[cfg(target_os = "windows")]
fn get_os_info() {
println!("windows");
}
fn main() {
get_os_info();
}
可以添加组合条件:
all()
表示所有条件必须满足。any()
表示任一条件满足即可。not()
表示条件取反。
#[cfg(not(target_os = "linux"))]
fn get_os_info() {
println!("not linux");
}
在非 Linux 系统下会编译此函数。
2. cfg! 宏
cfg!
宏会在编译期间评估条件,并返回一个bool
值:
fn main() {
if cfg!(target_os = "linux") {
println!("linux");
} else {
println!("not linux");
}
}
具体使用哪一种方法,要视情况而定。