2009-11-24 16 views
5

Voglio iniziare a utilizzare Boost. Sto programmando un programma C++ in Visual Studio (ovviamente su una macchina Windows).Utilizzo di Boost su Windows (Visual Studio)

di Boost Getting Started Guide dice:

Il modo più semplice per ottenere una copia di Boost è quello di utilizzare un programma di installazione. La versione del sito Web Boost di questa Guida introduttiva fornirà informazioni non scadenti sugli installer non appena disponibili, oppure vedere Download di Boost o il programma di installazione fornito da BoostPro Computing. Si consiglia vivamente di utilizzare un programma di installazione se si utilizza Microsoft Visual Studio, poiché il programma di installazione può scaricare e installare i file binari precompilati della libreria, risparmiando il problema di crearli da soli.

Sono un po 'insicuro se voglio seguire questo consiglio, o semplicemente scaricare e costruire tutto da solo. I potenziali problemi che vedo con un programma di installazione sono:

  1. Le cose non sono più autonome (vale a dire che ogni membro del team deve installare Boost, quindi configurare Visual Studio per riconoscerlo).
  2. Non riesco a mantenere Boost sotto il controllo del codice sorgente (mi piacerebbe che fosse come i file nel mio controllo sorgente come tutto il resto). (Modifica: A giudicare dai commenti, sembra che la spinta sia abbastanza grande (come in 5 GB!), Quindi ovviamente avrei bisogno di tenere solo alcune parti sotto il controllo del codice sorgente).

Quindi la mia domanda è: sto solo diventando paranoico e dovrei seguire il percorso di installazione, o sono corretto e dovrei costruirlo da solo? Se qualcuno ha esperienza con Boost e Visual Studio, sarei grato se potessero condividere le loro opinioni su questo (e se dovesse essere il caso di crearlo da solo, anche eventuali suggerimenti sarebbero apprezzati, ad esempio dovrei copiare solo ogni file che effettivamente uso? ecc.).

Nota:

Alcune domande simili su StackOverflow, ma che non ha chiesto esplicitamente, mi fanno pensare che non avrei dovuto usare il programma di installazione, che è il motivo che sto chiedendo esplicitamente qui . Per riferimento, queste sono le domande:

  1. Boost linking, Visual Studio & version control
  2. Including Relevant Boost Libraries with C++ Source (Using Visual Studio)
+0

@Edan: grazie per aver incluso i 2 collegamenti nel post. +1 – sivabudh

risposta

8

Un buon modo per assicurarsi che tutti abbiano configurato tutto correttamente è quello di utilizzare gli esterni di svn. È possibile creare qualcosa come /trunk/boost1.35 e quindi si può puntare a quello con un SVN esterno.

In questo modo le nuove versioni di spinta escono, si può semplicemente repoint tua svn esterno /trunk/boost1.40

Nel repository, i punti esterni SVN per quella cartella svn all'interno del repository. Esempio /depends/boost

Noi manteniamo personalmente i file di intestazione di boost sotto il controllo del codice sorgente come descritto, ma manteniamo le librerie libere come zip che richiediamo a tutti di scaricare. Abbiamo una variabile di ambiente simile al seguente BOOST_LIB e la indirizziamo alla directory della libreria boost corrente.

+0

lo facciamo anche sul posto di lavoro –

0

Diversi punti di non tenere sotto il controllo di origine:

  1. Boost è enorme.
  2. compilazione non è banale
  3. Compilation è lungo (non si vuole tutti gli sviluppatori a farlo)

io personalmente non mi preoccuperei costruzione io stesso (esp per diverse configurazioni.) - su Linux ad esempio utilizzo sempre il pacchetto di distribuzione fornito.

+0

3) non è davvero un problema IMHO in quanto è un'operazione una tantum. Diamine, si potrebbe anche farlo una volta e passare il codice compilato in giro come un ZIP. – DevSolar

+1

@DevSolar: se lo stai facendo, non c'è motivo per non utilizzare il programma di installazione. – EFraim

0

Vorrei usare l'installazione, a meno che non sia necessario personalizzare i flag di compilazione. È molto più semplice, e il potenziamento degli edifici (almeno l'ultima volta che l'ho fatto) non è stato il processo più chiaro.Non c'è niente che ti impedisca di scaricare la fonte che corrisponde alla versione di boost fornita dall'installatore e di metterla in controllo di versione. Questo è l'approccio che ho usato in passato per altre librerie (nss, iplanet sdk) e ha funzionato bene.

2

Ho installato Boost sotto Windows. Il suo strumento di installazione "bjam" rileva automaticamente MSVC e lo utilizza per la compilazione; Non avrei alcuna riserva contro la costruzione di te stesso. È solo marginalmente più difficile di "./configure & & & make install", davvero.

Costruire da soli potrebbe anche essere necessario, perché le librerie Boost disponibili online non includono il supporto ICU (Unicode), ad es. per la lib di boost_regex.

+0

Nota interessante sul supporto Unicode, è sicuramente qualcosa di cui avrò bisogno nel mio progetto in futuro. –

1
  1. Le cose non sono più indipendenti (cioè ogni membro del team deve installare Boost, quindi configurare Visual Studio per riconoscerlo).
  2. Non riesco a mantenere Boost sotto il controllo del codice sorgente (mi piacerebbe che fosse come i file nel mio controllo sorgente come tutto il resto).

Prima di mettere Boost sotto controllo del codice sorgente, tenere a mente che le librerie compilate occupano diversi gigabyte. (la mia cartella Boost è di circa 5 GB) Potrebbe valere la pena lasciare che tutti installino Boost da soli.

A parte questo, l'installer dovrebbe funzionare bene, ma compilarlo da soli è davvero banale.

Boost installa in cartelle specifiche della versione per impostazione predefinita (sia se lo si compila da soli e se si utilizza il programma di installazione), quindi è abbastanza facile avere più versioni installate fianco a fianco. Quindi, se il tuo team aggiorna Boost a una nuova versione, puoi semplicemente modificare il percorso di inclusione nei file .sln o .vsprops per fare in modo che il compilatore cerchi la nuova versione - se un collaboratore non ha installato la versione giusta, ha solo non sarà in grado di costruire (che potrebbe essere preferibile costruire silenziosamente con una vecchia versione)

+0

Il vero problema con tutti che lo installano da soli, è che rende molto difficile l'aggiornamento a una nuova versione. Devi far saltare tutti allo stesso tempo, attraverso tutti i rami del codice. – teeks99

+0

Vero. Ma di nuovo, ogni singolo sviluppatore viene avvisato perché riceve errori di compilazione se tenta di creare un ramo che si basa su una versione di Boost che non hanno. Non sto dicendo che questa sia una soluzione perfetta, solo che mettere 5GB di file compilati nel controllo del codice sorgente non sembra neanche l'ideale. Forse (tutte le versioni usate di esso) dovrebbero essere installate su una cartella di rete condivisa a cui tutti possono accedere, consentendo l'installazione centralizzata di nuove versioni senza disturbare singoli sviluppatori. – jalf

3

Si consiglia di utilizzare l'installazione.

Costruire da soli non è difficile.Ecco la procedura:

 
    Download boost into C:\Program Files\boost\boost_1_40_0

Open the command prompt and change your current directory to the Boost root directory 

bootstrap 

.\bjam 

The library binaries are now sprinkled through the folders under 
C:\Program Files\boost\boost_1_40_0\bin.v2 
Find the required libraries and copy them to 
C:\Program Files\boost\boost_1_40_0\lib 

(Do not confuse folders called lib and libs!) 

Tuttavia, questo è abbastanza lenta e abbastanza complicato, soprattutto l'ultimo passo, che tu e tutti gli altri probabilmente avvitare qualcosa di tanto in tanto, con un conseguente spreco di molte ore a risolvere misteriosi errori di costruzione - questa è comunque la mia esperienza.

+0

Grazie per la risposta, potresti spiegare perché ho bisogno di copiare le librerie da libs a lib? Tu dici di non confonderli, e in realtà il tutorial sul sito web Boost stesso dice di costruire esattamente come hai detto tu, ma poi indica Visual Studio in C: \ Programmi \ boost \ boost_1_40_1 \ lib, no s, anche se non lo fa Esistono Non menziona nulla sul dover copiare in lib. C'è qualcosa che mi manca? Perché la discrepanza? –

+0

Non so il perché. So che quando ho seguito la procedura che ho descritto, era necessario - i file binari della libreria non erano in/lib, ma sparpagliati in /bin.v2. Forse era un bug, ora risolto? Cosa succede quando lo provi? I biblioteche finiscono nei posti giusti senza che tu debba spostarli? – ravenspoint

+2

Potrebbero esserci vari inconvenienti nelle versioni precedenti, ma nella versione 1.40, eseguendo "bjam" senza opzioni, le librerie vengono messe in "stage \ lib". Non è necessario copiare nulla manualmente. –

1

Un'altra cosa da considerare è se è necessario tutto o parte del boost. Quello che facciamo qui è mettere l'origine nel controllo della versione e creare un progetto di wrapper singolo per le librerie che vogliamo effettivamente usare. Le singole librerie sono scritte in modo abbastanza pulito da far cadere solo tutti i file cpp in un nuovo progetto di studio visivo. Potrebbe essere necessario impostare l'intestazione di configurazione di primo livello (penso di averlo impostato come inclusione forzata) e l'intera cosa è stata costruita molto facilmente. Aggiungi questo progetto come dipendenza dalla tua soluzione e significa che puoi tenere tutti i binari fuori dallo SCM e anche assicurarti che tutti siano sempre aggiornati.

Gran parte dell'amplificazione è solo l'intestazione, quindi è possibile che ci sia solo una manciata di librerie che si vorrebbe costruire. Questo approccio ti rende più facile abbinare anche le impostazioni del tuo progetto VS.

0

mi sento di raccomandare di eseguire bootstrap.bat prima - che costruirà bjam.exe e poi

bjam --stagedir="c:\Program Files\Boost" --build-type=complete --toolset=msvc-9.0 --with-regex --with-date_time --with-thread --with-signals --with-system --with-filesystem --with-program_options stage 

bjam --stagedir="c:\Program Files\Boost" --build-type=complete --toolset=msvc-10.0 --with-regex --with-date_time --with-thread --with-signals --with-system --with-filesystem --with-program_options stage 

.. 

Hai solo bisogno di specificare il set di strumenti corretta. Metterà tutti i binari nella cartella .. \ lib.

0

Realmente creiamo il nostro programma di installazione, con solo le parti di Boost che utilizziamo nei nostri lavori e lo distribuiamo alle persone IT per l'installazione su macchine sviluppatore. Manteniamo anche quella copia del boost nel controllo di revisione, in modo che possiamo tenere traccia delle dipendenze tra esso e il resto del nostro sistema in modo appropriato, e costruirlo da soli.

Suppongo che dal punto di vista del lavoro questo sia il peggiore di entrambi i mondi. Ma ci dà il massimo controllo.

0

Direi, basta rendere l'installazione Boost come prerequisito per il tuo progetto. L'installazione manuale richiede pochi minuti con un numero limitato di passaggi. La maggior parte dei progetti di grandi dimensioni, alla fine finiscono per occupare la dipendenza da Boost, quindi non è insolito renderlo un prerequisito. Certo, è banale automatizzarlo. I vantaggi sono:

  1. non si aggiunge la distribuzione Boost gigante nel tuo repo
  2. Non c'è bisogno di cherry-pick quello che si utilizza
  3. Altri progetti possono condividere l'installazione
  4. One- impostazione ora si occupa anche della costruzione di intestazione + cpp librerie

per Visual Studio 2015 e la versione più recente di spinta, ecco le istruzioni passo-passo seguiamo per la nostra squadra:

https://stackoverflow.com/a/39628306/207661

Problemi correlati