2010-04-26 7 views
5

Ho provato a leggere la documentazione ma è piuttosto impenetrabile, quindi spero che qualcuno possa avere una risposta semplice. Voglio definire una nuova 'variante', basata su 'debug', che aggiunge solo alcune definizioni di macro alla riga di comando del compilatore, ad esempio "-DSOMEMACRO". Penso che potrei essere in grado di farlo come una "sotto-variante" di debug, oppure semplicemente definire una nuova variante copiando "debug", ma non sono nemmeno sicuro di dove farlo. Sembra che feature.jam in $ BOOST_BUILD_DIR/build possa essere il luogo. Forse quello che voglio veramente è semplicemente una nuova 'funzione', ma non mi è ancora chiaro esattamente cosa devo fare e dove, e non so se una 'funzione' mi consente di indirizzare i prodotti di compilazione in una directory diversa alla build di 'debug'.come creare una nuova variante in bjam

Qualsiasi suggerimento sarà apprezzato. (Nel caso ve lo stiate chiedendo, devo usare bjam dato che è stato adottato come standard aziendale.)

risposta

7

Non sono abbastanza sicuro di quello che volete, ma ci sono molte possibilità.

A. Si desidera sempre compilare con la macro SOMEMACRO definita. In questo caso, nella Jamfile per il vostro progetto aggiungere

project 
    : requirements # These are requirements for this project 
     # If compiling debug, define SOMEMACRO 
     <variant>debug:<define>SOMEMACRO 
    : usage-requirements 
     # These are requirements projects using this project must have 
     <variant>debug:<define>SOMEMACRO 
    ; 

Se avete bisogno di SOMEMACRO sempre definito, è possibile rimuovere la condizione <variant>debug:. Se è necessario impostare altri flag, è possibile utilizzare <cflags>, <cxxflags> e in base alle esigenze.

B. Si desidera un passaggio rapido per attivare i flag/definire, forse per impostazione predefinita, forse no, e build con esso non sono compatibili con build senza. In tal caso, si desidera una funzionalità.

import feature ; 
feature.feature steves-feature : off on 
    : composite propagated link-incompatible ; 
feature.compose <steves-feature>on : <define>SOMEMACRO ; 

Il feature.feature regola definisce una funzione chiamata <steves-feature> con due valori possibili e tre proprietà. composite significa che si tratta di una funzionalità composta da altre funzionalità (in questo caso <define>SOMEMACRO). propagated significa che qualsiasi obiettivo che include un obiettivo con questo set di funzionalità avrà anche questo set di funzionalità. e link-incompatible significa che gli obiettivi con <steves-feature>on non possono essere combinati con gli obiettivi con <steves-feature>off. (Di conseguenza, bjam metterà i file creati in una directory di nome steves-feature-on o steves-feature-off se questa funzione è impostata da qualsiasi destinazione.)

Questa funzione può essere utilizzata proprio come la funzione <define> utilizzato nella regola di progetto in quanto sopra sezione. (È anche possibile aggiungerla a una sezione default-build della regola del progetto.)

Nota che è anche possibile impostare funzioni dalla riga di comando: bjam steves-feature=on.

C. Si desidera una variante completa. Penso che l'idea sia se si hanno alcune configurazioni di build comuni con un sacco di caratteristiche diverse che dovrebbero essere impostate insieme. Bene, se hai già creato la funzione come sopra, ora è facile.

variant steves-debug : debug : <steves-feature>on ; 

Questa variante sarà la stessa come la variante debug ma con la caratteristica aggiuntiva <steves-feature>on.

Non ho mai utilizzato la regola variant, quindi potrebbe essere necessario importarla da qualche parte.Inoltre, potresti essere in grado di fare

variant steves-debug : debug : <define>SOMEMACRO ; 

ma non so se bjam creerà la struttura della directory o meno. (Probabilmente lo sarà.)

+0

Grazie, caso B o forse C è quello che sto cercando, proverò prima B dal momento che è più semplice. Grazie per una spiegazione molto dettagliata. –

+0

Se funziona, è necessario fare clic sul segno di spunta accanto alla risposta per contrassegnarlo come risposta. In questo modo, gli altri sanno che la domanda ha una risposta. E ho un po 'di credito. :-) (Non hai ancora risposto alle risposte alle tue precedenti domande.) – AFoglia

+0

Mi scuso, ora l'ho selezionato, mi sto ancora abituando al protocollo. –