我想cfg用Cargo 有条件地编译我的源代码,在谷歌搜索一段时间后,似乎解决方案是使用cargo --features.
http://doc.crates.io/manifest.html
我尝试添加一些
#[cfg(feature = "foo")]
Run Code Online (Sandbox Code Playgroud)
在源代码和
cargo build --features foo
Run Code Online (Sandbox Code Playgroud)
,但它说
Package `xxx v0.0.1 (file:///C:/yyy/xxx)` does not have these features: `foo`
Run Code Online (Sandbox Code Playgroud)
我怎样才能让货物识别出这些特征?我必须添加一些东西Cargo.toml吗?
这里的版本rustc和cargo我使用:
C:\>rustc --version
rustc 0.13.0-nightly (42deaa5e4 2014-12-16 17:51:23 +0000)
C:\>cargo --version
cargo 0.0.1-pre-nightly (5af754d 2014-12-18 01:50:48 +0000)
Run Code Online (Sandbox Code Playgroud) 我已经遵循了不少的文件,并试图重用一个例子,但我不能让我的代码工作.
我的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中读过条件编译?我知道这不是一个完全重复,因为我正在寻找一个有效的例子.