Rust进阶之条件编译
来源:互联网 发布:mac 安装node sass 编辑:程序博客网 时间:2024/06/05 00:53
Rust有一个特殊的属性,#[cfg],允许你一句传递给编译器的标志来编译代码。它有两种形式:
如果你正在使用Cargo,怎样打开或关闭这些开关,它们在Cargo.toml文件中的[features]节进行设置。
当你这么做了,Cargo会给rustc传递一个参数:
这些cfg标志将会决定哪个一个被激活,因此,哪个代码被编译。我们看一下这段代码:
如果我们使用cargo build --features "foo"编译,它将会把--cfg feature="foo"标志传递给rustc,并且输出将会有一个foo模块。如果我们使用常规的cargo build,没有额外的标志被传递,将不会有foo模块存在。
如果a被使用cfg设置过属性,则跟#[b]一样。
在编译阶段依据配置设定,这些将会被替换成true或false。
#[cfg(foo)] #[cfg(bar = "baz")]
它们还有一些辅助形式:
#[cfg(any(unix, windows))] #[cfg(all(unix, target_pointer_width = "32"))] #[cfg(not(foo))]
可以随意嵌套:
#[cfg(any(not(unix), all(target_os="macos", target_arch = "powerpc")))]
如果你正在使用Cargo,怎样打开或关闭这些开关,它们在Cargo.toml文件中的[features]节进行设置。
[features] # no features by default default = [] # The “secure-password” feature depends on the bcrypt package. secure-password = ["bcrypt"]
当你这么做了,Cargo会给rustc传递一个参数:
--cfg feature="${feature_name}"
这些cfg标志将会决定哪个一个被激活,因此,哪个代码被编译。我们看一下这段代码:
#[cfg(feature = "foo")] mod foo { }
如果我们使用cargo build --features "foo"编译,它将会把--cfg feature="foo"标志传递给rustc,并且输出将会有一个foo模块。如果我们使用常规的cargo build,没有额外的标志被传递,将不会有foo模块存在。
cfg_attr
你可以使用cfg_attr给基于cfg的变量设置另外一个属性:
#[cfg_attr(a, b)]
如果a被使用cfg设置过属性,则跟#[b]一样。
cfg!
cfg!语法扩展允许你在代码中使用这些种类的标志:
if cfg!(target_os = "macos") || cfg!(target_os = "ios") { println!("Think Different!"); }
在编译阶段依据配置设定,这些将会被替换成true或false。
0 0
- Rust进阶之条件编译
- rust条件编译
- C语言及程序设计进阶例程-10 预处理之条件编译
- 预处理之条件编译
- 编译Rust for arm
- Rust进阶之堪比junit的单元测试和集成测试
- <Python进阶读书笔记>之(五) 条件表达式
- 预处理命令之条件编译
- linux c 之 条件编译
- Rust语法之注释
- Rust之介绍
- Rust语言之HelloWorld
- rust(windows下)怎么编译
- rust
- Rust猜数字之比较
- Rust猜数字之循环
- Rust语法之变量绑定
- Rust语法之if语句
- 一个文本框2种字体大小、颜色
- [BZOJ4027]HEOI2015兔子与樱花|贪心
- 链表-多项式相加
- 如何递归实现数组求和
- Sql Server函数全解(一)字符串函数
- Rust进阶之条件编译
- 反射相关应用:动态代理
- 量资金融
- HG255d通过U盘搭载php服务器
- HandlerThread的具体使用
- HMVC
- PMP官方教材(PMBOK第五版中文电子版)
- Java开发环境配置
- 悄悄的我也开始写行动了