Rust-条件编译

#[cfg]

#[cfg]允许我们基于一个传递给编译器的标记编译代码。它有两种形式:

#[cfg(foo)]
fn foo(){
}

#[cfg(bar="baz")]
fn bar(){
}

它还有一些帮助选项:

复制代码
#[cfg(any(unix,target_pointer_width = "32"))]
pub fn foo(){
}

#[cfg(all(unix,windows))]
pub fn bar(){
}

#[cfg(not(foo))]
pub fn not_foo(){
}
复制代码

 这些选项可以任意嵌套:

#[cfg(not(foo),all(target_os = "macos",target_arch = "powerpc"))]
pub fn not_foo(){
}

 如何启用和禁用这些开关,如果我们使用Cargo,可以在Cargo.toml中的[features]部分设置:

[features]
foo=[]

当我们这样设置时,Cargo传递给rustc一个标记:

--cfg feature="${feature_name}"

这些cfg标记集合会决定哪些功能被启用,并且因此,哪些代码会被编译。如下:

如果使用

cargo build --features="foo"

编译,他会向rustc传递--cfg feature="foo"标记,并且输出中将会包含 mod foo。如果我们使用常规的cargo build编译,则不会传递额外的标记,因为输出不会存在foo模块。

 

#[cfg_attr]

 

cfg!

posted @   johnny_zhao  阅读(376)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2021-01-30 769. Max Chunks To Make Sorted
2019-01-30 android查询天气demo,基于mvp+kotlin+rxjava2+retrofit2
2019-01-30 gogo learning
点击右上角即可分享
微信分享提示