Voy a empezar un nuevo proyecto de C++ (puede que tenga algo de C componentes) pronto y estoy en busca de un moderno, industrial-fuerza (es decir, no beta) sistema de construcción. El software será creado por varios desarrolladores en 3-5 años y va a correr en Linux (Mac OS X y Windows podría ser admitidos más tarde). Estoy buscando algo que tenga una mejor comprensión, facilidad de uso y facilidad de mantenimiento que, por ejemplo, make pero es todavía lo suficientemente potente como para manejar un proyecto complejo. El software de código abierto es el preferido.

Me puse a buscar en Boost.Build, CMake, Maven y SCons hasta ahora y me gustó características y los conceptos de todos esos, pero me falta la experiencia para tomar una decisión para un proyecto grande.

InformationsquelleAutor flo | 2010-05-17

9 Comentarios

  1. 7

    He usado SCons por más de un año y es realmente genial. Es un completo sistema de generación, no un generador de secuencias de comandos de generación.

    Es basado en Python, y escribir la SConstruct y SConscript (equivalente de Makefile) en Python que permite llamar a cualquier biblioteca que se pueda desear y una sintaxis más clara de que lo que un Makefile autorizar.

    Dado que Python es multiplataforma, por lo que es SCons, no hay ningún problema.

    Viene con un buen número de objetivos:

    • detecta el binario disponible y asigna automáticamente un número de extensiones hacia la correcta binarios
    • detecta las extensiones de los objetos/bibliotecas dependiendo del sistema operativo, aunque se puede reemplazar
    • proporciona las instalaciones para las operaciones comunes (retraso después de la compilación), como Mover, Copiar, Alquitrán, y puede proporcionar a sus propias secuencias de comandos de python y gancho de ellos
    • funciona fuera de la caja, y sin embargo proporciona varios enlaces de personalización en cada nivel

    Es realmente eficiente, y propone incluso de funciones avanzadas (como el almacenamiento de un hash de los procesados en un archivo de sqlite db en lugar de utilizar la marca de tiempo), incluso si usted decide su estrategia en el final.

    También ofrece dependencias del ciclo de detección de forma gratuita (algo que sin duda no viene con los Makefiles) y la interfaz es generalmente mejor y /o automatizado.

    Me dicen que fue eficiente ? Bueno, obviamente, permite múltiples trabajos a ser ejecutados en paralelo 😉

    Y también es gratis, como en bebida gratis, siéntase libre de contribuir 😉

    La recomiendo.

    • SCons suena realmente interesante para mí y no parece ser una buena integración con el IDE así: scons.org/wiki/IDEIntegration Cualquier desventajas?
    • Lo siento por el doble post, pero aquí es un buen comparación con casi todas las demás herramientas: scons.org/wiki/SconsVsOtherBuildTools
    • Como mencionado, correctamente configurado Makefiles son más rápidos, es sólo que son menos legibles. En el trabajo actualmente estamos yendo hacia una solución personalizada (que yo no puedo compartir), que implica la generación de Makefile y sólo utilizaremos SCons personalizados para la generación previa / posterior a la generación de los pasos que no caben en. Pero luego tenemos algunos grandes proyectos en todo 🙂 Para los proyectos pequeños probablemente no notará la diferencia de velocidad.
    • Muy interesante, he leído que SCons es lento. Por otro lado, en mi opinión, si el script de compilación es el cuello de botella durante la construcción, deberías obtener una generación más rápida de la máquina 😀 Su solución personalizada suena a algo parecido a lo que CMake no – todo en un fácil de aprender, fácil de leer/escribir el idioma, y generar un script de generación para el sistema de generación para hacer el trabajo sucio, que no tiene que ser repetido cada generación. CMake también genera que los archivos o scripts de MSBuild. Pero entonces, yo no tengo un gran proyecto – la construcción tarda unos diez minutos en el servidor.
    • Relacionados con SCons lentitud yo creo que depende de el tamaño del proyecto. Para una 10m construir usted tal vez chatarra fuera de los 30 años. El quid de la cuestión es que se generan los objetivos, por lo que si las secuencias de comandos para generar en ellos como lento, el proceso es lento ya que SCons no empezar a construir antes de que todos los objetivos han sido definidos (automáticamente se decide el orden en el que construir ellos). Sin embargo, nuestro migración tiene más que ver con una empresa de amplia implementación de una herramienta en lugar de una elección: es más fácil depender de una herramienta compatible de rodar sus propios, y la herramienta es bastante limpio.
    • Es realmente impactante leer a alguien diciendo Scons es eficiente, ya que ha sido repetidamente medido como uno de los más lentos sistemas de construcción. Ver números, por ejemplo: retropaganda.info/~bohan/trabajo/sf/psycle/ramas/bohan/…

  2. 16

    No tengo experiencia con los demás, pero si usted está buscando una cruz-plataforma, de la cruz-herramientas del sistema de generación usar CMake. CMake no es en realidad un sistema de generación, es un script generador – genera la actual construcción de guiones para una gran cantidad de sistemas de construcción y (y eso es en mi opinión la fuerza) genera los archivos de proyecto para importante Ide como Visual Studio y KDevelop. Los últimos KDevelop versiones, por cierto, tienen Intellisense para CMake archivos.

    El generado generar secuencias de comandos de Visual Studio o soluciones no son tan elegantes como se haría si crea manualmente, pero ya que usted también no tiene que mantener manualmente, está bien.

    La desventaja de CMake es que realmente no vienen con un montón de herramientas integradas, o una manera fácil de extender (en comparación, por ejemplo, de MSBuild, que por supuesto es sólo un sistema de generación, no un generador). Nuestros desarrolladores de Linux tienden a llamar a línea de comandos de Unix herramientas para hacer cosas como la compresión/descompresión, que no están disponibles en una instalación típica de Windows, mientras que en contraste MSBuild tiene miles de otros comandos disponibles de los proyectos de la comunidad, por lo que no es necesario utilizar la línea de comandos, y es muy fácil para crear una nueva Tarea de MSBuild. Actualmente estoy buscando la manera de evitar estas limitaciones para CMake, porque en la actualidad no podemos enteramente construir en Windows, aunque el código en sí tendría que construir bien.

    Escrito el CMake de los archivos no es una experiencia hermosa, pero está bien. El lenguaje tiene unas extrañas peculiaridades (como tener que repetir exactamente una si-condición en el else y endif, que le vuelven loco, especialmente cuando la experimentación), y que realmente, realmente odio tener un archivo llamado CMakeLists.txt en cada directorio que contiene las reglas de generación personalizada (y que tal vez un montón, en un proyecto de gran tamaño), y todos ellos se muestran sólo con el nombre en el IDE 😉

    • Gracias por su elaborada y bien equilibrada post. CMake parece ser mi #2 opción hasta el momento.
    • Mientras que usted será probable fino con SCons, te sugiero la lectura de cómo y por qué el equipo de KDE (con uno de los más grandes proyectos de software Libre en el mundo) cambio de autotools a SCons a CMake: lwn.net/Articles/188693
    • Usted no tendrá que repetir la condición en el else y endif; está allí para ayudar documento; pero es opcional.
  3. 9

    Un par de años en el futuro…

    • SCons está muriendo en popularidad, por lo que he visto. No me gusta en absoluto.
    • Waf es impresionante (en mi opinión). Si usted está buscando en SCons, trate de Waf primera. Sin embargo, en paralelo se construye siempre muestran todos los errores que se han producido…por lo que esperan la pantalla para ser inundado con mensajes de error. También, puede ser un poco complicado para ampliar.
    • Boost.Construir es uno de mis favoritos, pero tiene el peor documentación sobre la tierra. Aparte de eso, es muy flexible y te permite hacer casi cualquier cosa. Puede ser un poco lento a veces, sin embargo.
    • CMake es bueno para generar sólo Ninja secuencias de comandos; todo lo demás es basura (4000 líneas de makefiles para 1 fuente 1-proyecto ejecutable)
    • Tup es agradable, pero le falta nada para la configuración.
    • Autoconf es todavía autocrap.

    Otros que no se mencionan:

    • Kbuild es un poco raro, pero se ve bien. Eso es todo lo que sé.
    • mk-configurar es ideal para los amantes de la.
    • Shake con shake-lenguaje-c es flexible y le permite hacer nada…si sabes de Haskell y no le importa abandonar VS apoyo.
    • Jamplus ama a meter -m32 al final de cada freaking de comandos del compilador, que chupa en un sistema de 64 bits.
    • Tundra puede ser un poco repetitivo, pero todavía es muy rápido y preciso.
    • Bam…Tundra es mejor. Es rápido sin sacrificar la precisión.
    • Gyp acto (utilizado para Google Chrome/Chromium) es underdocumented pero es una gran alternativa a CMake.
    • Premake es grande si el valor de la simplicidad, pero puede ser molesto cuando se trata de hacer haciendo aparentemente simple de las cosas.
    • Bakefile es muy restrictivo, pero ideal para proyectos simples.
    • fbuild es mi favorito (junto con el Impulso.Construir). Es muy underdocumented pero tiene un montón de ejemplos y muy legible el código fuente. Construcción de guiones cortos, demasiado. Se usa para crear (y fue diseñado para) Felix. También es muy, muy rápido, y casi siempre exacta y ha automática de paralelismo que NO inundar la pantalla. Nunca. Lo estoy usando para construir una expresión regular JIT motor y estoy muy, muy feliz. También es muy fácil de extender. Sin embargo, es todavía técnicamente en beta, aunque nunca he tenido ningún problema real.

    Me gustaría recomendar fbuild o Impulso.Construir…o gyp acto si te gusta makefile generadores.

    Si desea ampliar la funcionalidad básica, definitivamente fbuild.
    Si usted tiene un MONTÓN de plataforma específica de banderas/opciones y un montón de líos, usar el Boost.Construir.
    Si usted necesita un makefile generador o un montón de configuraciones, trate de gyp acto.

  4. 6

    También una herramienta de otra es TUP.
    Mis experiencias son muy buenas con esta herramienta.
    Tup

    • Maneja las dependencias de forma automática (sin necesidad de llamar a gcc-M).
    • Funciona con parciales de gráficos de dependencia, por lo tanto es muy rápido.
    • Es compatible con recursiva estructuras de directorio, de una manera brillante (Tuprules.tup)
    • Admite git en circulación manera: Puede crear el .gitignore archivos automáticamente, basándose en la lista de destino.
    • Muy fácil de usar y la sintaxis de la Tupfiles son muy simples.
    • Mantiene una constante de la generación de los archivos de origen, incluso cuando se cambia el nombre a un archivo, o de borrar. Por lo tanto, la incorporada binarios son siempre reflejando el estado actual de la fuente. También significa que usted nunca tiene que limpiar su proyecto.

    Después de usarlo durante dos proyectos complejos puedo decir sólo una cosa mala de que:

    • Es complicado de usar, junto con ClearCase vistas dinámicas.
    • Tup utiliza fusible para ser capaz de rastrear las dependencias. Esto hace que sea posible para saltar gcc-M, pero esto también implica algunos inconvenientes cuando se desea utilizar la maza con un análisis estático o con herramientas similares.
  5. 5

    He tenido la oportunidad de comparar todos ellos a mí. Primero hemos utilizado hacer. Que es feo. Usted tiene que ser hacer experto para entender realmente lo que está pasando. Yo no tomaría el dolor nunca más.

    Luego nos mudamos a SCons. Es la sintaxis está bien, usted todavía puede hacer cosas feas porque usted puede escribir sus propios scripts que tienden a ser programas. Esto le da una gran flexibilidad. Pero nos patearon SCons porque tuvimos que esperar unos 20 segundos para el proyecto de exploración y el otro 20 por construir cada vez. Entonces mi universidades escribió el código de python para la memoria caché de los resultados del análisis para los archivos y casi se duplicó el rendimiento. Todavía tuvo que esperar cerca de 20sec para la construcción, cuando se ha agregado un archivo o eliminado uno de los proyectos que tenía para volver a ejecutar construir con un … relleno de parámetros de caché.

    Entonces me he movido el proyecto a CMake que definitivamente es mi herramienta de elección. Es la estructura y la sintaxis de un muy bien legible y también se documenta. Se genera proyectos para casi todos los IDE y también la apoya las nuevas IDEs en el mercado. El proceso de compilación es tan rápido como su IDE y sólo necesita volver a CMake al agregar nuevos proyectos o cambiar las propiedades del proyecto para quedarse con CMake

    Así que yo sugeriría CMake

  6. 4

    Echa un vistazo a Waf. Es un decente sistema que yo uso para la mayoría de mis proyectos que está escrito en python y derivados de Scons, de Hacer y de otros sistemas similares.

  7. 2

    De lo que usted ha mencionado, he tratado de Maven es demasiado estricto, no escala y está diseñado para Java, así que me gustaría considerar que no es.
    También he oído de la gente el uso de «Automake», que en tono de broma llamada «Autobreak»

    Mi humilde opinión, el proyecto con una larga expectativa de vida se prefiere puro Hacer, GNU Make, para ser precisos.
    Hay varias características de gran alcance de Hacer, normalmente no se utilizan, que ayudan a evitar el código repetitivo (por ejemplo, el uso de eval/llamada, no recursiva de la construcción). Es compatible con cualquier otro sistema de compilación (por ejemplo, en nuestros proyectos, hemos logrado combinar con Ant, utilizado para Java se basa). Cuenta con una excelente documentación, y es familiar para la mayoría de los desarrolladores.

    Desde mi experiencia, siempre es posible aislar makesystem desde el proyecto hasta el punto de que la mayoría de los proyectos de los makefiles contienen 2 líneas: el nombre del destino y «incluyen ${MKSYS_HOME}/makesystem.mk».

    • Yo no puedo estar de acuerdo con hacer. No ofrece nada que usted no puede conseguir en ningún otro lugar, no encaja con Ide modernos, no tiene muchas herramientas integradas (es probable que tenga el mismo de la línea de comandos de la herramienta de dependencia describo en mi respuesta, lo cual es muy malo para la independencia de la plataforma), y no es muy elegante, sobre todo en comparación con los últimos sistemas de construcción (o como generadores de CMake). Es bien justificada la opinión que prefieren hacer, así que no es un -1, pero no es +1 o bien (para mí), simplemente porque no puedo imaginar a cualquiera de nuestros proyectos que se han beneficiado de forma manual utilizando hacen en lugar de CMake.
    • Es una idea sencilla, que pone a Hacer de la competencia. Se adapta perfectamente al menos en Eclipse & Visual Studio modelo de desarrollo. A diferencia de CMake y otros «el sistema de generación de generadores de» manipular el comportamiento del sistema de construcción directamente, no a través de su cuenta&fallos del generador. También vale la pena decir que para el desarrollo de C++ y las tres plataformas sólo es necesario especificar el 30 de líneas de comandos (compilación, enlace lib, enlace de reciclaje, estático o compartido, depuración/opt) x (Linux, windows, MAC), que es exactamente el 30 de líneas de código, y usted no tiene la sobrecarga de uso de 5% de los «genéricos en el sistema de compilación».
    • Ahora agregue la captura, desembalaje y configuración de todos construir y requisitos previos de implementar en su totalidad la construcción y apuesto a 30 líneas no será suficiente, especialmente para diferentes entornos. Uno de nuestros CMake proyectos de llamadas 50+ comandos de la CLI, de los cuales ninguno es para cosas básicas como la de la compilación. Yo también no estoy de acuerdo con hacer el montaje en el desarrollo de Visual Studio modelo – usted tiene que mantener el archivo makefile(s) y la solución de lado a lado, mientras que con CMake, tiene sólo una fuente para ambos. En mi opinión, el tiempo para la línea de comandos basada en scripts de generación es más. «Control directo» también significa «más trabajo por hacer».
    • buenos puntos, aunque puedo quejar con los mismos argumentos, una vez que la secuencia de comandos de implementación de ti usted sabe que a la vez lo que hace y hace exactamente lo que usted necesita. Pero por lo demás, yo creo que el autor de la pregunta tiene una buena idea sobre bienes y males de Makefile y CMake los enfoques basados en el proceso de construcción del diseño.
  8. 2

    He intentado:

    1. scons <— Demasiado lento.
    2. waf <— Muy buenas, pero overengineered en mi opinión. A veces no es fácil adivinar qué hacer.
    3. cmake <— No es agradable sintaxis, pero bastante robusto y bastante rápida.
    4. autotools (mythbuster docs) <— Sólo unix. Mejor manejo de compilación cruzada.
    5. tup <– es tan rápida y correcta de que es increíble.

    Usted está buscando industrial de la fuerza. Yo diría que scons es, porque es demasiado lento en mi humilde opinión, incluso si era agradable. No tiene una fase de configuración, ya sea.

    waf se ve bien, pero me he encontrado con la lucha de cómo hacer un par de cosas, especialmente proyectos anidados, en la forma correcta.

    autotools es REALMENTE robusto, aunque si quieres apoyar a windows. Compilación cruzada es muy robusto en autotools.

    CMake: creo que deberías ir a por este. Es bastante rápido, se encarga de la configuración tal y como autotools, pero funciona en windows, genera proyectos de xcode, visual studio, hacer y más. Esta es una buena característica, si usted tiene un multi-plataforma proyecto, ya que pueden generar los proyectos para los Idus de elección. Pero debo decir que no me gusta la sintaxis demasiado. De todos modos, se encarga de los grandes proyectos bien. Me gustaría ir para cmake si quería una solución de potencia industrial. Aunque yo personalmente odio un poco, es la única opción viable.

    Tup: creo que es más de unix orientado. Pero debo decir que para mí es la mejor y es increíblemente rápido y sencillo. Me encanta. Pero lo que usted necesita es cmake.

  9. 1

    Otro a tener en cuenta es Bakefile.

    Su principal fortaleza es tomar un relativamente simple archivo de entrada simple (como XML se, de todos modos) y la colocación de diferentes nativo de archivos del sistema de compilación: Makefile.en autoconf basado en sistemas (Linux, OS X de la línea de comandos, BSD…), solución de Visual C++ y archivos de proyecto, proyectos de Xcode, MinGW y genérico Unix Makefiles, etc.

    Que dijo, no sé que iba a usar un sistema como este desde el principio. Dado que el objetivo inicial es de Linux y los otros son «posibles», considere la posibilidad de comenzar con automake, y poner el Bakefile (o lo que sea) de mover hasta que su portabilidad. Es siempre un error construir cosas antes de que realmente lo necesitan. Siempre hay un equilibrio — el mínimo Común Denominador de Síndrome de down en este caso-y si usted no tiene para pagar la pena hoy en día, dejarlo hasta que usted tiene que pagar; puede nunca tiene que pagar. Si usted va con automake y construir sus archivos con cordura, la migración no será demasiado doloroso.

Dejar respuesta

Please enter your comment!
Please enter your name here