Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

rust - How do I use conditional compilation with `cfg` and Cargo?

I want to conditionally compile my source code using cfg with Cargo, after Googling for a while, it seems that the solution is to use cargo --features.

http://doc.crates.io/manifest.html

I tried adding a few

#[cfg(feature = "foo")]

in the source code and

cargo build --features foo

, but it says

Package `xxx v0.0.1 (file:///C:/yyy/xxx)` does not have these features: `foo`

How can I let cargo identify the features? Do I have to add something in Cargo.toml?

Here's the version of rustc and cargo I am using:

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)
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You have to introduce the existing features in your Cargo.toml.

I was able to conditionally compile by doing the following:

  • In Cargo.toml, create a features section and introduce a certain feature name:

    [features]
    
    customfeature = [] # feature has no explicit dependencies
    

    If you want your feature to have specific dependencies check the examples in the documentation.

  • In your code, use #[cfg(feature="customfeature")]

  • Run cargo build --features customfeature

Since your steps 2 & 3 seem to be fine, there must probably be a problem with your Cargo.toml.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...