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!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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