2014-12-24 6 views
12

Desidero compilare il codice sorgente in modo condizionale utilizzando cfg con Cargo, dopo aver effettuato il comando Google per un po ', , sembra che la soluzione sia quella di utilizzare cargo --features.Come utilizzare la compilazione condizionale con `cfg` e Cargo?

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

Ho provato ad aggiungere un paio

#[cfg(feature = "foo")] 

nel codice sorgente e

cargo build --features foo 

, ma dice

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

Come posso far carico di identificare il Caratteristiche? Devo aggiungere qualcosa in Cargo.toml?

Ecco la versione di rustc e cargo sto usando:

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) 

risposta

13

è necessario introdurre le funzionalità esistenti nel vostro Cargo.toml.

sono stato in grado di compilare condizionalmente effettuando le seguenti operazioni:

  • In Cargo.toml, creare una sezione features e introdurre un certo nome caratteristica:

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

    Se volete che il vostro caratteristica di avere controllo delle dipendenze specifiche .

  • Nel codice, utilizzare #[cfg(feature="customfeature")]

  • Run cargo build --features customfeature

Dal momento che i punti 2 & 3 sembrano andare bene, ci deve probabilmente un problema con il Cargo.toml.

+0

è possibile testare la funzionalità in "if"? Grazie. –

+0

@BulatM. Sì, puoi usare 'if cfg! (Feature =" customfeature ") {...}' – Pauan