2009-02-04 8 views
17

¿Qué es Boost Jam y a qué vale la pena migrar?¿Qué es Boost Jam y a qué vale la pena migrar?

Entiendo que el atasco es un sistema de construcción construido por fuerza, pero no estoy seguro de cómo el atasco de refuerzo & atasco regular es diferente.

También espero que haya alguien en la comunidad SO que haya trabajado con él y que tal vez pueda destacar algunas diferencias y/o beneficios.

Respuesta

5

Para mis propósitos, es justo lo que crea la biblioteca de impulso para usted, no sabía que podría hacer algo más con ella, así que no entiendo lo que podría significar al migrar a ella. Y lo siento, pero no estoy enterado de qué es el atasco regular. Dado que nadie más ha proporcionado una respuesta, solo proporcionaré mi comprensión.

Boost es una colección de clases y las funciones de C++ son útiles para diversas tareas. Las clases y funciones de boost están agrupadas en bibliotecas. Algunas de las bibliotecas tienen todo su código en archivos de encabezado que puede usar simplemente mediante el uso de una instrucción de preprocesador #include, mientras que otras (como el sistema de archivos o la biblioteca de expresiones regulares) tienen parte de su implementación en archivos .cpp.

La compilación de estos archivos .cpp puede tomar años (es como 30 minutos dependiendo de lo que esté compilando) y sería un verdadero dolor si cada media hora cada vez que quisiera recompilar su programa fuera realmente doloroso. Entonces, lo que han hecho es solo para aquellas bibliotecas que están parcialmente almacenadas en archivos .cpp, pueden precompilarlas en un archivo .lib, y ese es el propósito de impulsar el atasco. Eso significa que solo tiene que pasar media hora compilándolos una vez, y desde ese momento nunca más tendrá que esperar media hora.

Sin embargo, como puedes imaginar, cada biblioteca de impulso consta de muchos archivos cpp y muchos archivos de encabezado, y hay muchos sabores diferentes de cada uno (versiones de depuración, versiones de lanzamiento, multihebra, etc.) y por lo tanto no es un proceso simple para simplemente compilar la biblioteca de impulso usted mismo. Ahí es donde entra en juego el refuerzo. Le da el comando para compilar las bibliotecas y luego emite todos los comandos para usted al compilador, y para el final, tendrá una colección de archivos .lib precompilados, uno para cada sabor diferente de cada biblioteca. Los archivos de encabezado de alguna manera le dicen al vinculador qué archivos lib incluir, por lo que si tiene la configuración correcta de rutas, el sabor correcto del archivo .lib precompilado se vinculará automáticamente a su programa, lo que le ahorrará una compilación de 30 minutos.

Puede ver qué bibliotecas deben compilarse mediante boost jam y qué bibliotecas no lo hacen al mirar esta página: http://www.boost.org/doc/libs/1_37_0 - si una biblioteca no necesita un archivo lib (y por lo tanto no requiere que se meta con boost jam primero), dirá "Build & Link: Header only", mientras que si una biblioteca requiere precompilar un archivo lib, dirá "Build & Link: Automatic linking".

Además, si está en Windows, puede descargar los archivos .lib precompilados para que nunca tenga que usar el atasco de refuerzo. Para lograrlo, lo que debes hacer es ir a la página www.boost.org, ir a la sección de Introducción y seguir todo el proceso para asegurarte de que tienes todo configurado correctamente. Uno de los enlaces en la versión de Windows de esa página le dice dónde encontrar los archivos .lib precompilados.

+0

Solo quiero dejar claro que solo estoy publicando esto porque pensé que podría ser útil. Nunca usé el atasco pero han pasado días y nadie respondió a este tipo, así que decidí responder por el poco conocimiento que tengo. –

+3

Otros comentarios (posiblemente añadidos más adelante) dicen que Boost Jam es un sistema de compilación; por lo tanto, va más allá de la compilación de las bibliotecas de impulso. – Jaywalker

+0

Esta respuesta es terriblemente incorrecta y mal informada. –

9

Como usted dice, Boost Jam es un sistema de compilación, y se puede usar independientemente de cualquier otra biblioteca de impulso. No sé nada de Perforce Jam, pero, a mi entender, Boost jam es muy similar y, en general, compatible.

La principal diferencia es que Boost Jam a menudo viene con Boost Build, una colección de reglas de atascos diseñadas para tareas comunes, p.compilación de bibliotecas, ejecución de pruebas unitarias, creación de documentación doxygen, etc.

Comparado con otros sistemas de compilación, Boost Jam/Boost Build está diseñado para compilar fácilmente diferentes variantes. Por lo tanto, si desea cambiar la configuración de compilación de depuración a versión o de subproceso único a múltiple, determina muchos de los cambios automáticamente.

El inconveniente es que la sintaxis es muy delicada, y fuera del sitio web de impulso, no hay una buena documentación. Pero me imagino que Perforce Jam es igual de malo en ese sentido.

+1

De acuerdo, la sintaxis y todo el proceso no es tan intuitivo –

8

Dada la elección de las herramientas de compilación, no migraría al atasco. Existen mejores sistemas de compilación: CMake/SCons para C/C++, qmake para Qt, Ant para Java, NAnt y MSBuild para .NET, y más. Puede que no sean técnicamente superiores, pero serán menos dolorosos de usar simplemente porque mucha más gente está familiarizada con ellos (por otro lado, podrían ser técnicamente superiores, por supuesto: D).

+0

+1 para SCons. :-) – Parappa

+0

-3 para SCons. Vea esta serie de blogs de 3 partes: 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

Disculpe, en marzo de 2009 mi máquina del tiempo no funcionaba bien; de lo contrario, habría viajado hasta agosto de 2010, averiguado cualquier problema de escalabilidad y luego volví al 2009 para no incluir eso :) Bromas aparte, SCons podría ser problemático si su proyecto crece mucho, pero para la mayoría de los proyectos pequeños y medianos está perfectamente bien.Editar: divulgación completa - Yo uso CMake :) –

28

Uso Boost Jam para mi desarrollo de C++ multiplataforma. Lo elegí porque

  • Quiero mi código para construir todas partes Boost construye,
  • que utiliza un lenguaje declarativo relativamente simple para especificar cómo construir objetivos y
  • se puede acumular todos los diferentes sabores de su binarios (por ejemplo, depuración frente a versión, 32 bits frente a 64 bits, msvc frente a gcc) en una sola invocación con un mínimo absoluto de excepciones relacionadas con el sabor en las declaraciones de compilación.

Puede refinar reglas genéricas con configuraciones específicas del sabor, en lugar de escribir reglas separadas para cada permutación de sabor. La sintaxis no es exactamente lo que habría elegido, pero no es demasiado difícil acostumbrarse.

Este trabajo compara Boost Jam a CMake, SCons, y Eclipse CDT: http://syrcose.ispras.ru/2009/files/04_paper.pdf

Mi entendimiento es que Boost Jam es una rama de Perforce Jam mantenido por la comunidad Boost, y que Perforce atasco no se mantiene de forma activa más (el release notes tiene la última actualización en abril de 2003).

Por supuesto, si no te importa el desarrollo multiplataforma, hay formas más fáciles de hacerlo, como han mencionado otros aquí. Personalmente, sigo teniendo la intención de volver a visitar Eclipse CDT; no parecía utilizable hace 5 años, pero he escuchado que ha recorrido un largo camino.

+0

Dado que esta respuesta todavía ocasionalmente recibe votos, quiero señalar que mi trabajo posterior cambió a CMake. Si bien no es perfecto, recomendaría CMake hoy sobre Boost Jam, debido a su compatibilidad con IDE y su popularidad/"notoriedad". Eclipse CDT es muy útil como IDE, pero no proporciona un sistema de compilación. –