条件编译可以通过两种不同的操作符实现,如下:
- cfg属性:在属性位置中使用#[cfg(...)]
- cfg!宏:在布尔表达式中使用cfg!(...)
例子1:
// 仅当目标系统为Linux 的时候才会编译
#[cfg(target_os = "linux")]
fn are_you_on_linux() {
println!("linux!")
}
// 仅当目标系统不是Linux 时才会编译
#[cfg(not(target_os = "linux"))]
fn are_you_on_linux() {
println!("not linux!")
}
fn main() {
are_you_on_linux();
println!("Are you sure?");
if cfg!(target_os = "linux") {
println!("Yes. It's linux!");
} else {
println!("Yes. It's not linux!");
}
}
例子2:
//main.rs
#[cfg(some_condition)]
fn conditional_function() {
println!("condition met!");
}
fn main() {
conditional_function();
println!("Hello, world!");
}
运行:rustc main.rs && ./main(报错)
运行:rustc --cfg some_condition main.rs && ./main
领取专属 10元无门槛券
私享最新 技术干货