2009-02-04 17 views
17

Che cos'è Boost Jam e vale la pena visitare Jam?Che cos'è Boost Jam e vale la pena di migrare a Jam?

Capisco che l'inceppamento è un sistema di costruzione costruito da perforce tuttavia non sono sicuro di come l'inceppamento di boost & inceppamento normale sia diverso.

Spero anche che ci possa essere qualcuno nella comunità SO che ha lavorato con esso e forse può evidenziare alcune differenze e/o benefici.

risposta

5

Per i miei scopi, è proprio la cosa che crea la libreria boost per te, non ero a conoscenza che potessi fare qualcos'altro con esso quindi non capisco cosa potresti significare migrando ad esso. E mi dispiace, ma non so cosa sia la marmellata normale. Dal momento che nessun altro ha fornito una risposta, mi limiterò a comprenderlo.

Boost è una raccolta di classi e funzioni per C++ utili per varie attività. Le classi e le funzioni di boost sono raggruppate in librerie. Alcune librerie hanno tutto il loro codice nei file di intestazione che puoi usare semplicemente usando un'istruzione #include per il preprocessore, mentre altre (come il filesystem o la libreria di espressioni regolari) hanno parte della loro implementazione nei file .cpp.

La compilazione di questi file .cpp può richiedere anni (è come 30 minuti a seconda di ciò che si sta compilando) e sarebbe davvero un problema se ci volesse mezz'ora ogni volta che si desidera ricompilare il programma. Quindi, ciò che hanno fatto è solo per quelle librerie che sono in parte archiviate in file .cpp, puoi precompilarle in un file .lib, e questo è lo scopo di boost jam. Ciò significa che dovrai dedicare solo mezz'ora alla compilazione di un numero una volta, e da quel momento in poi non dovrai più attendere ancora mezz'ora.

Tuttavia, come potete immaginare, ciascuna libreria di boost è composta da molti file cpp e molti file di intestazione, e ci sono molti diversi tipi di versioni (versioni di debug, versioni di rilascio, multi-thread, ecc.) E quindi non è un semplice processo per compilare da soli la libreria boost. È qui che entra in gioco boost. Gli dai il comando di compilare le librerie e poi invia tutti i comandi al compilatore e alla fine avrai una raccolta di file .lib precompilati, uno per ogni diverso sapore di ogni libreria. I file di intestazione in qualche modo dicono al linker quali file lib includere, quindi se hai la corretta configurazione dei percorsi, il sapore corretto del file .lib precompilato sarà automaticamente collegato al tuo programma, risparmiando così una compilazione di 30 minuti.

Si può vedere quali librerie devono essere compilate da boost jam e quali librerie non guardano questa pagina: http://www.boost.org/doc/libs/1_37_0 - se una libreria non ha bisogno di un file lib (e quindi non richiede di fare confusione con boost jam first), dirà "Build & Link: Header only" mentre se una libreria richiede di precompilare un file lib, dirà "Build & Link: collegamento automatico".

Inoltre, se si utilizza Windows, è possibile scaricare i file .lib precompilati in modo da non dover utilizzare l'inceppamento boost. Per ottenere ciò, ciò che dovresti fare è andare alla pagina www.boost.org, andare alla sezione Getting Started e seguirla fino in fondo per essere sicuro di avere tutto configurato correttamente. Uno dei collegamenti nella versione di Windows di quella pagina ti dice dove trovare i file .lib precompilati.

+0

Voglio solo essere chiaro che sto solo postando questo perché ho pensato che potrebbe essere utile. Non ho mai usato la marmellata, ma sono passati giorni e nessuno ha risposto a questo tizio, quindi ho deciso di rispondere per la poca conoscenza che ho. –

+3

Altri commenti (eventualmente aggiunti in seguito) indicano che Boost Jam è un sistema di compilazione; quindi va oltre la compilazione delle librerie di boost stesse. – Jaywalker

+0

Questa risposta è semplicemente terribilmente errata e disinformata. –

9

Come si afferma, Boost Jam è un sistema di compilazione e può essere utilizzato indipendentemente da altre librerie di boost. Non so nulla di Perforce Jam, ma per quello che ne so, la marmellata Boost è molto simile e per lo più compatibile.

La differenza principale è che Boost Jam viene spesso fornito con Boost Build, una raccolta di regole di inceppamento progettate per attività comuni, ad es.compila librerie, esegue test unitari, crea documentazione doxygen, ecc.

Rispetto ad altri sistemi di compilazione, Boost Jam/Boost Build è progettato per compilare facilmente diverse varianti. Quindi, se si desidera modificare le impostazioni della compilation da debug a release, o da single a multi-thread, determina automaticamente molte modifiche.

Lo svantaggio è che la sintassi è molto complessa e, al di fuori del sito Web di boost, non c'è una buona documentazione. Ma immagino che Perforce Jam sia altrettanto negativo a riguardo.

+1

Accetto, la sintassi e l'intero processo non sono così intuitivi –

8

Data la scelta degli strumenti di creazione, non migrerei all'inceppamento. Ci sono sistemi di build migliori là fuori - CMake/SCons per C/C++, qmake per Qt, Ant per Java, NAnt e MSBuild per .NET, e così via. Potrebbero non essere tecnicamente superiori, ma saranno meno dolorosi da usare semplicemente perché molte più persone hanno familiarità con loro (d'altra parte, potrebbero essere tecnicamente superiori, ovviamente: D).

+0

+1 per SCons. :-) – Parappa

+0

-3 per SCons. Guarda questa serie di blog in 3 parti: http://www.electric-cloud.com/blog/2010/03/08/how-scalable-is-scons/ http://www.electric-cloud.com/blog/ 2010/07/21/a-second-look-at-scons-performance/http://www.electric-cloud.com/blog/2010/08/11/the-last-word-on-scons-performance/ –

+5

Mi dispiace, nel marzo 2009 la mia macchina del tempo funzionava male, altrimenti avrei viaggiato fino ad agosto 2010, ho scoperto eventuali problemi di scalabilità, poi sono tornato nel 2009 per non includerlo :) A parte Jons, SCons potrebbe diventare problematico se il tuo progetto diventa molto grande, ma per la maggior parte dei progetti di piccole e medie dimensioni è perfetto.Edit: Full disclosure - Io uso CMake :) –

28

Uso Boost Jam per il mio sviluppo C++ multipiattaforma. L'ho scelto perché

  • voglio che il mio codice per costruire ovunque Boost costruisce,
  • si utilizza un relativamente semplice linguaggio dichiarativo per specificare come costruire gli obiettivi, e
  • Si può costruire tutti i diversi sapori della vostra binari (es. debug contro release, 32-bit vs 64-bit, msvc vs gcc) in una singola chiamata con un minimo assoluto di eccezioni relative al sapore nelle dichiarazioni di compilazione.

È possibile perfezionare le regole generiche con impostazioni specifiche per il gusto piuttosto che scrivere regole separate per ogni permutazione di sapore. La sintassi non è esattamente ciò che avrei scelto, ma non è troppo difficile abituarsi.

Questo articolo confronta Boost Jam a CMake, SCons, ed Eclipse CDT: http://syrcose.ispras.ru/2009/files/04_paper.pdf

mia comprensione è che Boost Jam è un ramo di Perforce Jam mantenuto dalla comunità Boost, e che Perforce Jam non è mantenuto attivamente più (lo release notes ha l'ultimo aggiornamento ad aprile 2003).

Naturalmente, se non ti interessa lo sviluppo multipiattaforma, ci sono modi più semplici per andare, come altri hanno menzionato qui. Personalmente, ho intenzione di rivedere Eclipse CDT; non sembrava utilizzabile 5 anni fa, ma ho sentito che ha fatto molta strada.

+0

Poiché questa risposta si alza ancora occasionalmente-voti, voglio notare che il mio lavoro successivo è passato a CMake. Anche se non è perfetto, consiglierei CMake oggi su Boost Jam, grazie al suo supporto IDE e alla sua popolarità/"notorietà". Eclipse CDT è molto utile come IDE, ma non fornisce un sistema di compilazione. –