2009-11-24 15 views
5

Quiero empezar a usar Boost. Estoy programando un programa C++ en Visual Studio (obviamente en una máquina con Windows).El uso de Boost en Windows (Visual Studio)

de Boost Getting Started Guide dice:

La forma más fácil de obtener una copia de Boost es utilizar un instalador. El sitio Versión Boost de esta Guía de introducción tendrá información sin fecha de instaladores a medida que estén disponibles, o ver Boost descargas o el instalador proporcionado por BoostPro Computing. En especial, recomendamos el uso de un instalador si utiliza Microsoft Visual Studio, debido a que el instalador puede descargar e instalar los binarios precompilados de la biblioteca, que le ahorra la molestia de ellos la construcción de sí mismo.

estoy un poco inseguro si quiero seguir este consejo, o simplemente descargar y generar todo yo mismo. Los problemas potenciales que veo con un instalador son:

  1. Las cosas ya no son autónomas (es decir, cada miembro del equipo tiene que instalar Boost y luego configurar Visual Studio para reconocerlo).
  2. No puedo seguir Boost bajo control de origen (I gustaría idealmente que sea soure archivos en mi control de código fuente como todo lo demás). (Editar: A juzgar por los comentarios, parece que es un poco impulso grande (como en 5 GB), por lo que, obviamente, que había necesidad de mantener sólo partes de ella bajo control de origen).

Así que mi pregunta es, ¿Estoy siendo paranoico y debe ir a la ruta de instalación, o estoy en lo correcto y debería construir yo mismo? Si alguien tiene alguna experiencia trabajando con Boost y Visual Studio, agradecería si pudieran compartir sus puntos de vista sobre esto (y si fuera para construirlo yo mismo, también se apreciarían los consejos, por ejemplo, si solo copiara todos los archivos). que realmente uso? etc.).

Nota:

Algunas preguntas similares sobre stackoverflow, pero que no preguntaban esto explícitamente, me hacen pensar que no debería utilizar el instalador, que es por lo que estoy pidiendo explícitamente aquí . Como referencia, estas son las preguntas:

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

@Edan: gracias por incluir los 2 enlaces en su publicación. +1 – sivabudh

Respuesta

8

Una buena forma de asegurarse de que todos tengan todo configurado correctamente es usar svn externals. Puede crear algo como /trunk/boost1.35 y luego puede señalarlo con un svn externo.

De esa manera como las nuevas versiones de impulso de salir, sólo se puede re-apuntar su SVN externa a /trunk/boost1.40

En su repositorio, sus puntos externos a esa carpeta SVN SVN dentro de su repositorio. Ejemplo /depends/boost

Nosotros personalmente mantenemos los archivos de cabecera de impulso bajo el control de código fuente como se describe, pero guardamos las libretas como un archivo comprimido que requerimos que todos descarguen. Tenemos una variable de entorno algo así como BOOST_LIB y la señalamos al directorio actual de la biblioteca de impulso.

+0

Hacemos esto en mi lugar de trabajo también –

0

Varios puntos NO para mantenerlo bajo control de origen:

  1. Boost es enorme.
  2. Compilación no es trivial
  3. Compilación es largo (no desea que todos los desarrolladores de hacerlo)

personalmente no me molestaría en la construcción de mí mismo (especialmente durante varias configuraciones.) - en Linux , por ejemplo, siempre utilizo el paquete de distribución proporcionado.

+0

3) no es realmente un problema en mi humilde opinión, ya que es una operación de una sola vez. Diablos, incluso podría hacerlo una vez y pasar el código compilado como un ZIP. – DevSolar

+1

@DevSolar: si lo hace, entonces no hay ninguna razón para no usar el instalador. – EFraim

0

me gustaría usar el instalador, a menos que necesite para personalizar las banderas de construcción. Es mucho más fácil, y aumentar la potencia (al menos la última vez que lo hice) no fue el proceso más claro.No hay nada que le impida descargar la fuente que coincide con la versión de refuerzo que le proporciona el instalador, y poner eso en control de la versión. Este es el enfoque que he utilizado en el pasado para otras bibliotecas (nss, iplanet sdk) y ha funcionado bien.

2

He creado Boost en Windows. Su herramienta de instalación "bjam" detecta automáticamente MSVC y lo usa para compilar; No tendría ninguna reserva contra la construcción de ti mismo. Es solo un poco más difícil que "./configure & & make & & make install", en serio.

Construir usted mismo podría ser necesario, porque las bibliotecas de Boost disponibles en línea no incluyen el soporte de ICU (Unicode), p. para el boost_regex lib.

+0

Nota interesante sobre el soporte Unicode, eso es definitivamente algo que necesitaré en mi proyecto en el futuro. –

1
  1. Las cosas ya no son autónomos (es decir, cada miembro del equipo tiene que instalar Boost, a continuación, configurar Visual Studio para reconocerlo).
  2. No puedo seguir Boost bajo control de origen (I gustaría idealmente que sea soure archivos en mi control de código fuente como todo lo demás).

Antes de poner Boost bajo control de origen, tenga en cuenta que las bibliotecas compiladas ocupan varios gigabytes. (mi carpeta Boost cuesta alrededor de 5GB) Vale la pena dejar que todos instalen Boost por sí mismos.

Aparte de esto, el instalador debería funcionar bien, pero compilarlo tú también es muy trivial.

Impulse las instalaciones en carpetas específicas de la versión de forma predeterminada (tanto si las compila usted mismo como si usa el instalador), por lo que es bastante fácil tener varias versiones instaladas una al lado de la otra. Entonces, si su equipo actualiza Boost a una nueva versión, simplemente podría cambiar la ruta de inclusión en los archivos .sln o .vsprops para hacer que el compilador busque la nueva versión; si un compañero de trabajo no ha instalado la versión correcta, simplemente no será capaz de compilar (lo que podría ser preferible a construir silenciosamente con una versión anterior)

+0

El problema real con que todos lo instalen es que hace que la actualización a una nueva versión sea muy difícil. Tienes que hacer que todos salten al mismo tiempo, en todas las ramas del código. – teeks99

+0

Es cierto. Pero, de nuevo, cada desarrollador individual recibe una notificación porque obtienen errores de compilación si intentan crear una rama que dependa de una versión de Boost que no tienen. No digo que esta sea una solución perfecta, solo que poner 5GB de archivos compilados en el control de la fuente tampoco parece ideal. Tal vez (todas las versiones usadas) se instalen en una carpeta de red compartida a la que todos puedan acceder, lo que permite la instalación central de nuevas versiones sin molestar a los desarrolladores individuales. – jalf

3

Recomiendo usar el instalador.

Construirlo usted mismo no es difícil.Aquí está el procedimiento:

 
    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!) 

Sin embargo, esto es bastante lento y sólo lo suficiente complicado, especialmente el último paso, que usted y todos los demás probablemente modifica algo de vez en cuando, lo que resulta en una pérdida de muchas horas resolviendo misteriosos errores de compilación, esta es mi experiencia de todos modos.

+0

Gracias por la respuesta, ¿podría explicarme por qué necesito copiar las bibliotecas de libs a lib? Usted dice que no los confunda, y en realidad el tutorial en el sitio web de Boost dice construir exactamente como usted dijo, pero luego apunta a Visual Studio en C: \ Program Files \ boost \ boost_1_40_1 \ lib, no s, aunque no lo haga t existe. No menciona nada sobre tener que copiar a lib. ¿Se me escapa algo? ¿Por qué la discrepancia? –

+0

No sé el porqué. Sé que cuando seguí el procedimiento que describí, era necesario: los archivos binarios de la biblioteca no estaban en/lib, sino que estaban distribuidos en /bin.v2. Tal vez era un error, ahora arreglado? ¿Qué pasa cuando lo intentas? ¿Los bibliotecarios terminan en los lugares correctos sin tener que moverlos? – ravenspoint

+2

Puede haber varios inconvenientes en versiones anteriores, pero en 1.40, ejecutando "bjam" sin ninguna opción, coloca las bibliotecas en 'stage \ lib'. No necesita copiar nada manualmente. –

1

Otra cosa a considerar es si necesita todo o parte de impulso. Lo que hacemos aquí es poner la fuente en control de versiones y crear un único proyecto de contenedor para las bibliotecas que realmente queremos usar. Las bibliotecas individuales están escritas con la suficiente limpieza como para dejar caer todos los archivos cpp en un nuevo proyecto de estudio visual. Es posible que deba configurar el encabezado de configuración de nivel superior (creo que establecí esto como una inclusión forzada) y todo se compila muy fácilmente. Agregue este proyecto como una dependencia en su solución y significa que puede mantener todos los binarios fuera del SCM y también asegurarse de que todos estén siempre actualizados.

Gran parte del impulso son los encabezados, solo de todos modos, por lo que puede encontrar que solo hay un puñado de bibliotecas que le gustaría construir. Este enfoque hace que sea más fácil para usted también adaptar la configuración de su proyecto VS.

0

recomendaría para funcionar bootstrap.bat primera - que va a construir bjam.exe y luego

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 

.. 

Usted sólo tiene que especificar el conjunto de herramientas correcta. Pondrá todos los binarios en la carpeta .. \ lib.

0

De hecho, creamos nuestro propio instalador, con solo las partes de Boost que usamos en nuestros trabajos, y se lo damos a la gente de TI para que lo instale en las máquinas de desarrollo. También conservamos esa copia de impulso en el control de revisiones, por lo que podemos rastrear las dependencias entre ella y el resto de nuestro sistema de manera adecuada y construirlo nosotros mismos.

Supongo que por motivos de trabajo esto es lo peor de ambos mundos. Pero nos da el máximo control.

0

Yo diría que basta con hacer la instalación de Boost como un requisito previo para su proyecto. La instalación manual toma solo unos minutos con una pequeña cantidad de pasos por única vez. La mayoría de los proyectos complejos de gran tamaño, finalmente terminan asumiendo la dependencia de Boost, por lo que no es raro que sea un requisito previo. Por supuesto, es trivial automatizarlo. Las ventajas son:

  1. no agrega distribución gigante impulso en su repo
  2. Usted no tiene que cherry-pick lo que se utiliza
  3. Otros proyectos pueden compartir la instalación
  4. One- tiempo de configuración también se encarga de la construcción de bibliotecas de cabecera + CPP

para Visual Studio 2015 y la última versión de Boost, aquí están las instrucciones paso a paso que seguimos para nuestro equipo:

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

Cuestiones relacionadas