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");
    }
}

具体使用哪一种方法,要视情况而定。