Hemos estado enfrentando problemas similares en nuestra empresa. Administrar versiones de refuerzo en entornos de compilación nunca será fácil. Con más de 10 desarrolladores, todos codificando en sus propios sistemas, necesitarás algún tipo de automatización.
Primero, no creo que sea una buena idea almacenar copias de grandes bibliotecas como boost en SVN o cualquier sistema SCM para ese asunto, eso no es para lo que esos sistemas están diseñados, excepto si planea modificar el código en boost tú mismo. Pero supongamos que no estás haciendo eso.
Así es como lo gestionamos ahora, después de probar muchos métodos diferentes, esto funciona mejor para nosotros.
Para cada versión de boost que usemos, colocamos todo el árbol (descomprimido) en un servidor de archivos y agregamos subdirectorios adicionales, uno para cada arquitectura/compilación-combinación, donde colocamos las bibliotecas compiladas. Nos guardar copias de estos árboles en todos los sistemas de construcción y en el entorno global del sistema se agregan variables como:
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
Este directorio contiene el árbol de impulso (. Realce/* HPP) y las libs precompiladas añadidas (por ejemplo, lib/win/x64/msvc2010/libboost_system * .lib, ...)
Todas las configuraciones de compilación (vs soluciones, vs archivos de propiedades, gnu makefiles, ...) definen una variable interna , importando los vars de entorno, como:
BOOSTROOT=$(BOOST_1_48) # e.g. in a Makefile, or an included Makefile
y otras reglas de compilación, todas utilizan la configuración BOOSTROOT para definir las rutas de acceso incluidas y las rutas de búsqueda de bibliotecas, p.
CXXFLAGS += -I$(BOOSTROOT)
LFLAGS += -L$(BOOSTROOT)/lib/linux/x64/ubuntu/precise
LFLAGS += -lboost_date_time
El motivo para mantener copias locales de boost es la velocidad de compilación. Ocupa bastante espacio en disco, especialmente las librerías compiladas, pero el almacenamiento es barato y un desarrollador que pierde mucho tiempo compilando código no lo hace. Además, esto solo necesita ser copiado una vez.
La razón para usar entornos globales vars es que las configuraciones de compilación se pueden transferir de un sistema a otro y, por lo tanto, pueden registrarse de manera segura en su sistema SCM.
Para suavizar un poco las cosas, hemos desarrollado una pequeña herramienta que se encarga de la copia y la configuración del entorno global. Con una CLI, esto incluso se puede incluir en el proceso de compilación.
Diferentes entornos de trabajo significan diferentes reglas y culturas, pero créanme, hemos intentado muchas cosas y, finalmente, decidimos definir algún tipo de convención. Tal vez la nuestra puede inspirarte ...
Si está utilizando 'g ++', ¿por qué no usar 'gzip' para que coincida? Haha mal chiste, +1. –
¿Se aleja de SVN a un sistema SCM moderno? O puede comprimir el directorio de impulso para ponerlo en SVN para agilizar el proceso de finalización de la compra y, luego, hacer que parte del proceso de compilación descomprima ese archivo si es necesario. – bames53
@ bames53 Pensé en ello. No ahorraría mucho tiempo en Windows, debido a la extracción de muchos archivos pequeños. Sin duda, sería algo mejor. – Notinlist