标签:标记 cfg pub 编译 Rust 条件 foo fn
#[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!
标签:标记,cfg,pub,编译,Rust,条件,foo,fn 来源: https://www.cnblogs.com/johnnyzhao/p/15857000.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。
