Как использовать условную компиляцию с `cfg` и Cargo?

Я хочу условно скомпилировать свой исходный код, используя cfg с Cargo, после Googling на некоторое время, кажется, что решение должно использовать cargo --features.

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

Я попытался добавить несколько

#[cfg(feature = "foo")]

в исходном коде и

cargo build --features foo

но он говорит

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

Как я могу позволить грузовику идентифицировать функции? Должен ли я добавить что-то в 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)

Ответ 1

Вам необходимо представить существующие функции в Cargo.toml.

Я смог условно скомпилировать, выполнив следующее:

  • В Cargo.toml создайте раздел features и введите определенное имя функции:

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

    Если вы хотите, чтобы ваша функция имела определенные зависимости, проверьте примеры в документации.

  • В вашем коде используйте #[cfg(feature="customfeature")]

  • Запустите cargo build --features customfeature

Поскольку ваши шаги 2 и 3 кажутся прекрасными, вероятно, возникнет проблема с вашим Cargo.toml.