锈有能力在构建检查配置时间,例如,#[cfg(target_os = "linux")]
或者 if cfg!(target_os = "linux") {...}
,在那里target_os
是一个功能.
是否有可以在Rust中检查的所有(或至少是常用的)功能的列表?
查看有关属性的 相关问题是否有任何标准属性的详尽列表?.
我正在尝试使用 Rusts 功能有条件地编译我的板条箱中的模块,并且仅在启用功能时才使用它。当设置该功能时,条件编译工作正常,但在未设置该功能时拒绝编译。
我使用相同的功能标志有条件地导入主模块中的模块,因此我的假设是,当不使用该功能时不应导入该模块。
#[cfg(feature = "debug")]
pub mod k {
pub struct S { pub x: i32, pub y: i32}
}
Run Code Online (Sandbox Code Playgroud)
以及我如何在 main 中使用它
pub fn main() {
if cfg!(feature = "debug") {
use self::k;
let _s = k::S {x: 4, y: 5};
}
let g = vec![1, 2, 4];
println!("{:?}", g);
}
Run Code Online (Sandbox Code Playgroud)
如果我通过标志启用该功能,--features
那么它会按预期进行编译:
#[cfg(feature = "debug")]
pub mod k {
pub struct S { pub x: i32, pub y: i32}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我没有通过时,--features
它会失败,我的期望是它应该跳过带有该cfg!
集合的块。 …
我有src/bin/linux-only.rs
一些只在Linux上工作的东西(例如只存在于Linux上的libc绑定).我想将该文件排除在OS X上.
我开始#[cfg(target_os = "linux")]
使用每个块,linux-only.rs
但是这会使源代码更加混乱.
有没有更好的方法来做到这一点?
我已经遵循了不少的文件,并试图重用一个例子,但我不能让我的代码工作.
我的Cargo.toml看起来像这样:
[package]
name = "Blahblah"
version = "0.3.0"
authors = ["ergh <derngummit@ahwell.com"]
[dependencies]
[[bin]]
name = "target"
path = "src/main.rs"
[features]
default=["mmap_enabled"]
no_mmap=[]
mmap_enabled=[]
Run Code Online (Sandbox Code Playgroud)
我想根据我传递给cargo build
命令的功能配置,使用与mmap不同的缓冲区来本地测试我的代码.我的代码中有这个:
if cfg!(mmap_enabled) {
println!("mmap_enabled bro!");
...
}
if cfg!(no_mmap) {
println!("now it's not");
...
}
Run Code Online (Sandbox Code Playgroud)
编译器没有看到任何一个if
语句体中的代码,所以我知道这两个cfg!
语句都在评估为false.为什么?
我在Rust 0.10中读过条件编译?我知道这不是一个完全重复,因为我正在寻找一个有效的例子.