cmake build-process portability autotools

Autotools vs CMake para la compilación de Windows y Linux



build-process portability (2)

He estado buscando pros y contras de Autotools y CMake. Pero me gustaría conocer las opiniones de personas que han usado una (o ambas) de estas herramientas para proyectos.

Usé Autotools muy básicamente hace un año y sé que uno de los puntos buenos es que se basa en el shell scripting, por lo tanto, no necesita ser instalado para ser ejecutado y usa scripts portátiles. Pero parece que está demasiado orientado a Unix, y no sería posible ejecutar el archivo de configuración en Windows.

Ahora tengo que elegir una herramienta de sistema de compilación para un proyecto de código abierto que deberá compilarse al menos para Linux y Windows. Está escrito en C ++, y usa una interfaz gráfica de usuario de Qt, el resto es "genérico".

Gracias por tu ayuda.


Actualizado el 19 de junio de 2017:

He usado autotools antes durante un tiempo considerable.

Actualmente realizo un uso intensivo de cmake y meson en el trabajo y para proyectos personales, respectivamente.

Algunos consejos personales:

  1. para equipos grandes, apegue a CMake si quiere hacer uso de los generadores para VS y XCode. Si no los necesitas, consideraría seriamente el mesón.
  2. Elige meson sobre autotools a menos que necesites algo realmente esotérico que soporte autotools y meson no. De lo contrario, en mi humilde opinión, Meson es una opción mucho mejor que autotools ya, y podrá soportar ventanas.

También he probado scons , scons y tup .

El sistema más completo y multiplataforma es CMake , pero el DSL de meson será más fácil de usar para las personas que usan python y otros. Meson también está comenzando a admitir VS (un generador VS2015) y algunos proyectos ya tienen soporte experimental para él, por ejemplo gstreamer. Gstreamer se compila también en ventanas con mesón. Ahora mismo hay un generador VS2015 y VS2017 pero no me he probado los generadores últimamente. A partir de meson 0.37.1 se necesita algo de trabajo, pero están mejorando y la versión actual ya es 0.40.

Mesón

Pros:

  • El DSL no se interpone en absoluto. De hecho, es muy agradable y familiar, basado en python.
  • Soporte de compilación cruzada bien pensado.
  • Todos los objetos están fuertemente tipados: no es fácil realizar errores de sustitución de cadenas, ya que los objetos son entidades como ''depencency'', ''include directory'', etc.
  • Es muy obvio cómo agregar un módulo para una de sus herramientas.
  • La compilación cruzada parece más fácil de usar.
  • Muy bien pensado. El diseñador y escritor principal de Meson sabe de lo que habla muy bien cuando diseña un sistema de compilación.
  • Muy, muy rápido, especialmente en compilaciones incrementales.
  • La documentación es 10 veces mejor que lo que puedes encontrar en cmake. Visite http://mesonbuild.com y encontrará tutorial, howtos y una buena referencia. No es perfecto, pero es realmente reconocible.

Contras:

  • No tan maduro como CMake, sin embargo, considero que ya es completamente utilizable para C ++.
  • Sin embargo, no hay tantos módulos disponibles, gnome, qt y los comunes ya están allí.
  • Generadores de proyectos: parece que el generador VS no está funcionando tan bien a partir de ahora. Los generadores de proyectos CMake son mucho más maduros.
  • Tiene una dependencia python3 + ninja.

Cmake

Pros:

  • Genera proyectos para muchos IDEs diferentes. Esta es una característica muy buena para los equipos.
  • Juega bien con las herramientas de Windows, a diferencia de las autotools.
  • Estándar maduro, casi de facto.
  • Microsoft está trabajando en la integración de CMake para Visual Studio.

Contras:

  • No sigue ninguna norma o directriz bien conocida.
  • Sin objetivo de desinstalación
  • El DSL es extraño, cuando comienzas a hacer comparaciones y cosas así, y las cuerdas contra lo de la lista o escapan de los caracteres, cometerás muchos errores, estoy bastante seguro.
  • La compilación cruzada es una mierda

Autotools

Pros:

  • El sistema más poderoso para la compilación cruzada, en mi humilde opinión.
  • Los scripts generados no necesitan nada más que make, un shell y, si lo necesita construir, un compilador.
  • La línea de comandos es realmente agradable y consistente.
  • Un estándar en el mundo de Unix, muchos documentos.
  • Línea de comando realmente poderosa: cambio de directorios de instalación, desinstalación, cambio de nombre de binarios ...
  • Si se dirige a Unix, las fuentes de empaque con esta herramienta son realmente convenientes.

Contras:

  • No funcionará bien con las herramientas de Microsoft. Un verdadero espectáculo.
  • La curva de aprendizaje es ... bueno ... Pero en realidad puedo decir que CMake tampoco fue tan fácil.

Sobre la curva de aprendizaje, hay dos fuentes muy buenas de las que aprender:

La primera fuente te pondrá en funcionamiento más rápido. El libro es una discusión más profunda.

Desde Scons, waf y tup, Scons y tup son más como make. Waf se parece más a CMake y a las autotools. Intenté waf en lugar de cmake al principio. Creo que está sobreinyectado en el sentido de que tiene una API OOP completa. Los guiones no parecían cortos en absoluto y para mí era realmente confuso el material del directorio de trabajo y cosas relacionadas. Al final, descubrí que las autotools y CMake son una mejor opción. Mi favorito de estos 3 sistemas de construcción es tup.

Tu p

Pros

  • Realmente correcto.
  • Increíblemente rápido . Deberías intentarlo para creerlo.
  • El lenguaje de scripts se basa en una idea muy fácil que se puede entender en 10 minutos.

Contras

  • No tiene un marco de configuración completo.
  • No pude encontrar la manera de hacer objetivos como doc , ya que generan archivos que desconozco y deben aparecer en la salida antes de generarse, o al menos, esa es mi conclusión por el momento. Esta era una limitación realmente molesta, si es así, ya que no estoy seguro.

En general, lo único que estoy considerando ahora para nuevos proyectos es Cmake and Meson. Cuando tengo la oportunidad, intentaré subir también, pero carece del marco de configuración, lo que significa que hace las cosas más complejas cuando necesitas todas esas cosas. Por otro lado, es realmente rápido.


No recomendaría autotools para Windows. Use CMake.

¿Por qué? Windows no tiene un sh.exe nativo y la emulación es lenta. También es muy fácil hacer que configury funcione mal. No digo que sea imposible en CMake, pero seguramente CMake abstrae más, así que te preocupas menos. La documentación de CMake puede ser un poco difícil de leer, pero una vez que está configurada, debería estar bien para todas las cadenas de herramientas compatibles con CMake. CMake también integra pruebas, empaquetamiento, etc.

Autotools es lento en Windows, no funciona fácilmente con MSVC y tiene peculiaridades extrañas con Windows (y otros SO) que son difíciles de depurar y difíciles de corregir. libtool también apesta a Windows, donde a menudo se niega a construir una biblioteca compartida, incluso si crees que debería y podría. Los problemas de reubicación de la cadena de herramientas también prevalecen con libtool, que puede ver los archivos incorrectos en la cadena de herramientas de un usuario. CMake es mucho más fácil en este sentido. Asume cosas normales sobre la plataforma de destino y crea instrucciones genéricas y buenas de compilación.

Además, CMake tiene una salida de color :) y agradables porcentajes de progreso.

PD: Tengo algo de experiencia con CMake y autotools en Windows como usuario. CMake tiende a funcionar, las autotools tienden a arrancarte la oreja cuando no estás mirando, y sonríe cuando falla debido a un extraño error ...