Autotools vs CMake para compilación de Windows y Linux


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

Usé Autotools básicamente hace un año y sé que uno de los puntos buenos es que se basa en shell scripting, por lo que no necesita instalarse para ejecutarse y usa portable shell scripting. Pero parece que está demasiado orientado a unix, y no sería posible ejecutar el archivo configure en Windows.

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

Gracias por su ayuda.

Author: Julio Guerra, 2011-04-30

2 answers

No recomendaría autotools para Windows. Usar CMake.

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

Autotools es lento en Windows, no funciona fácilmente con MSVC, y tiene peculiaridades extrañas con Windows (y otros sistemas operativos) que son difíciles de depurar y difíciles de arreglar. 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 son frecuentes con libtool, que puede mirar 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 genéricos y buenas instrucciones de construcción.

Además, CMake tiene salida coloreada :) y buenos porcentajes de progreso.

PD: Solo tengo algo de experiencia con CMake y autotools en Windows como usuario. CMake tiende a funcionar, autotools tiende a morderte la oreja cuando no estás mirando, y sonreírte cuando falla debido a algún error extraño...

 30
Author: rubenvb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-10 11:24:02

Actualizado el 19 de junio de 2017:

He usado autotools antes por una cantidad considerable de tiempo.

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

Algunos consejos personales:

  1. para equipos grandes, apégate a CMake si quieres hacer uso de los generadores para VS y XCode. Si no los necesitas, consideraría seriamente a Meson.
  2. Elija meson sobre autotools a menos que necesite algo realmente esotérico que autotools soporta y meson no. De lo contrario, en mi humilde opinión, Meson es una opción mucho mejor que autotools ya, y usted será capaz de soportar windows.

También he probado scons, waf, y tup.

El sistema multiplataforma más completo es CMake, pero el DSL de meson será más fácil de usar para las personas acostumbradas a python y otros. Meson está empezando a apoyar VS también (un generador VS2015) y algunos proyectos ya tener soporte experimental para ello, por ejemplo gstreamer. Gstreamer también está compilado en windows con meson. En este momento hay generador VS2015 y VS2017, pero no probé los generadores últimamente. A partir de meson 0.37.1 necesitaba un poco de trabajo, pero los están mejorando y la versión actual ya es 0.40.

Mesón

Ventajas:

  • El DSL no se interpone en el camino en absoluto. De hecho, es muy agradable y familiar, basado en python.
  • Cruz bien pensada soporte de compilación.
  • Todos los objetos están fuertemente tipeados: no puede cometer errores de sustitución de cadenas fácilmente, 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 sencilla de usar.
  • Muy bien pensado. El diseñador y escritor principal de Meson sabe qué habla muy bien al diseñar un sistema de construcción.
  • Muy, muy rápido, especialmente en compilaciones incrementales.
  • La documentación es 10 veces mejor que la que puedes encontrar en cmake. Ir a visitar http://mesonbuild.com y encontrarás tutorial, instrucciones y una buena referencia. No es perfecto, pero es realmente visible.

Contras:

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

Cmake

Ventajas:

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

Contras:

  • No sigue ninguna norma o guía bien conocida.
  • No hay destino de desinstalación.
  • El DSL es raro, cuando empiezas a hacer comparaciones y cosas así, y las cadenas de caracteres vs lista o caracteres de escape, cometerás muchos errores, estoy bastante seguro.
  • La compilación cruzada apesta.

Autotools

Ventajas:

  • El sistema más potente 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 necesitas para construir, un compilador.
  • La línea de comandos es realmente agradable y consistente.
  • Un estándar en el mundo unix, muchos documentos.
  • Realmente potente línea de comandos: cambiar directorios de instalación, desinstalar, renombrar binarios...
  • Si se dirige a unix, empaquetar fuentes con esta herramienta es realmente conveniente.

Contras:

  • No jugará bien con herramientas de Microsoft. Un verdadero showstopper.
  • La curva de aprendizaje es... bien... 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 marcha más rápido. El libro es una discusión más profunda.

De Scons, waf y tup, Scons y tup son más como make. Waf es más como CMake y las herramientas automáticas. Probé waf en lugar de cmake al principio. Creo que está sobredimensionado en el sentido de que tiene una API de OOP completa. Los scripts no se veían cortos en absoluto y era realmente confuso para mí las cosas del directorio de trabajo y cosas relacionadas. Al final, descubrí que autotools y CMake son una mejor opción. Mi favorito de estos 3 sistemas de construcción es tup.

Tup

Pros

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

Cons

  • No tiene un framework de configuración completo.
  • No pude encontrar la manera de hacer objetivos como doc, ya que generan archivos que desconozco y deben estar listados en la salida antes de ser generados, o al menos, esa es mi conclusión por ahora. Esto fue una limitación realmente molesta, si es que lo es, ya que no estoy seguro.

Con todo, las únicas cosas que estoy considerando en este momento para nuevos proyectos son Cmake y Meson. Cuando tenga la oportunidad, intentaré tup también, pero carece del marco de configuración, lo que significa que hace las cosas más complejas cuando se necesitan todas esas cosas. Por otro lado, es muy rápido.

 65
Author: Germán Diago,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-15 04:22:11