Abbiamo riscontrato problemi simili nella nostra azienda. Gestire le versioni di boost negli ambienti di compilazione non sarà mai facile. Con oltre 10 sviluppatori, tutti in codice sui propri sistemi, è necessario un qualche tipo di automazione.
In primo luogo, non penso che sia una buona idea conservare copie di grandi librerie come boost in SVN o qualsiasi sistema SCM del resto, non è quello che sono progettati per quei sistemi, tranne se si prevede di modificare il codice in boost te stesso. Ma supponiamo che tu non lo stia facendo.
Ecco come lo gestiamo ora, dopo aver provato un sacco di metodi diversi, questo funziona meglio per noi.
Per ogni versione di boost che usiamo, mettiamo l'intero albero (decompresso) su un file server e aggiungiamo sottodirectory aggiuntive, una per ogni combinazione di architettura/compilatore, dove inseriamo le librerie compilate. Manteniamo le copie di questi alberi su ogni sistema di generazione e nell'ambiente del sistema globale che aggiungere le variabili come:
BOOST_1_48=C:\boost\1.48 # Windows environment var
o
BOOST_1_48=/usr/local/boost/1.48 # Linux environment var, e.g. in /etc/profile.d/boost.sh
questa directory contiene l'albero di spinta (. Boost/* HPP) e le librerie precompilate aggiunte (es. lib/win/x64/msvc2010/libboost_system * .lib, ...)
Tutte le configurazioni di build (vs soluzioni, file di proprietà, file di configurazione di gnu, ...) definiscono una variabile interna , importando i vars dell'ambiente, come:
BOOSTROOT=$(BOOST_1_48) # e.g. in a Makefile, or an included Makefile
e ulteriori regole di compilazione utilizzano tutte l'impostazione BOOSTROOT per definire i percorsi di inclusione e i percorsi di ricerca della libreria, ad es.
CXXFLAGS += -I$(BOOSTROOT)
LFLAGS += -L$(BOOSTROOT)/lib/linux/x64/ubuntu/precise
LFLAGS += -lboost_date_time
La ragione per mantenere copie locali di boost è la velocità di compilazione. Ci vuole un bel po 'di spazio su disco, in particolare le librerie compilate, ma lo stoccaggio è a buon mercato e uno sviluppatore di perdere un sacco di codice di tempo compilazione non è. Inoltre, questo deve essere copiato solo una volta.
Il motivo dell'utilizzo di vars ambiente globale è che le configurazioni di generazione sono trasferibili da un sistema a un altro e possono quindi essere archiviate in sicurezza nel sistema SCM.
Per semplificare un po ', abbiamo sviluppato un piccolo strumento che si occupa della copia e dell'impostazione dell'ambiente globale. Con una CLI, questo può anche essere incluso nel processo di compilazione.
Diversi ambienti di lavoro significano regole e culture diverse, ma credetemi, abbiamo provato un sacco di cose e alla fine abbiamo deciso di definire una sorta di convenzione. Forse il nostro può ispirarti ...
Se si utilizza 'g ++', perché non utilizzare 'gzip' per la corrispondenza? Haha brutto scherzo, +1. –
Spostarsi da SVN a un moderno sistema SCM? Oppure è possibile comprimere la directory boost in alto per inserirla in SVN per velocizzare il checkout e quindi fare in modo che parte del processo di compilazione venga decompresso dal file, se necessario. – bames53
@ bames53 Ci ho pensato. Non risparmia molto tempo su Windows, a causa dell'estrazione di molti piccoli file. Sicuramente, sarebbe un po 'meglio. – Notinlist