我已关注quite a bit的the documentation并尝试reuse an example,但我无法使用我的代码。
我的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=[]
我想根据我传递给cargo build
命令的功能配置,使用与mmap不同的缓冲区来本地测试我的代码。我的代码中有这个:
if cfg!(mmap_enabled) {
println!("mmap_enabled bro!");
...
}
if cfg!(no_mmap) {
println!("now it's not");
...
}
编译器没有看到任何if
语句体中的代码,因此我知道两个cfg!
语句都在评估为false。为什么呢?
我已阅读Conditional compilation in Rust 0.10?,我知道这并不完全重复,因为我正在寻找一个有效的例子。
答案 0 :(得分:5)
测试某项功能的正确方法是feature = "name"
,如果您滚动一下,可以在the documentation you linked中看到:
至于如何启用或禁用这些开关,如果您正在使用Cargo, 它们设置在
Cargo.toml
的{{3}}中:[features] # no features by default default = [] # Add feature "foo" here, then you can use it. # Our "foo" feature depends on nothing else. foo = []
当你这样做时,Cargo将旗帜传递给
rustc
:--cfg feature="${feature_name}"
这些
cfg
标志的总和将决定哪些标志被激活, 因此,编译哪些代码。我们来看看这段代码:#[cfg(feature = "foo")] mod foo { }
在使用cfg!
宏的情况下,这会映射到cfg!(feature = "foo")
。