HiveBrain v1.2.0
Get Started
← Back to all entries
snippetrustMajor

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

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
compilationwithhowconditionalcfgandusecargo

Problem

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)

Solution

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.

Code Snippets

[features]

customfeature = [] # feature has no explicit dependencies

Context

Stack Overflow Q#27632660, score: 74

Revisions (0)

No revisions yet.