Saltar al contenido

Autotools vs CMake para compilación de Windows y Linux

Solución:

Actualizado el 16 de enero de 2019: consejos refinados a medida que evolucionan las herramientas.

He usado autotools antes durante un tiempo considerable.

Actualmente hago un uso intensivo de meson y cmake solo cuando lo necesito.

Algunos consejos personales:

  1. para equipos grandes, apégate a CMake si quieres hacer uso de los generadores para XCode. Si no lo necesita, usaría Meson directamente. Meson, a partir de la versión 0.49, también admite la búsqueda de archivos de configuración de CMake (aunque aún no probé qué tan bien funciona esto). Además, Visual Studio parece tener suficiente soporte en este momento, aunque, nuevamente, no lo probé. La ventaja de CMake es que tiene integración con Visual Studio.

  2. Suelta las herramientas automáticas. Meson ya cubre bien todo. Su modelo de compilación cruzada es increíblemente comprensible. En CMake, la última vez que revisé, todo fue bastante más difícil.

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 también está comenzando a admitir VS (un generador VS2015) y algunos proyectos ya tienen soporte experimental para él, por ejemplo, gstreamer. Gstreamer también se compila en Windows con meson. En este momento hay un generador VS2015 y VS2017, pero no probé los generadores últimamente. A partir del mesón 0.37.1 necesitaba algo de trabajo, pero los 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 puedes hacer string errores de sustitución fácilmente, ya que los objetos son entidades como ‘dependencia’, ‘incluir directorio’, etc.
  • Es muy obvio cómo agregar un módulo para una de tus herramientas.
  • La compilación cruzada parece más sencilla de usar.
  • Realmente bien pensado. El diseñador y escritor principal de Meson sabe muy bien de lo que habla cuando diseña un sistema de construcción.
  • Muy, muy rápido, especialmente en compilaciones incrementales.
  • La documentación es 10 veces mejor que la que puede encontrar en cmake. Visite http://mesonbuild.com y encontrará tutoriales, instrucciones y una buena referencia. No es perfecto, pero realmente se puede descubrir.

Contras:

  • Sin embargo, no es tan maduro como CMake, lo considero ya 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 ninja de python3 +.

Cmake

Pros:

  • Genera proyectos para muchos IDE diferentes. Esto es un muy buena característica para los equipos.
  • Funciona bien con las herramientas de Windows, a diferencia de las herramientas automáticas.
  • Estándar maduro, casi de facto.
  • Microsoft está trabajando en la integración de CMake para Visual Studio.

Contras:

  • No sigue ningún estándar o pauta bien conocidos.
  • Sin destino de desinstalación.
  • El DSL es extraño, cuando empiezas a hacer comparaciones y cosas así, y las cadenas frente a la lista o los caracteres de escape, cometerás muchos errores, estoy bastante seguro.
  • La compilación cruzada apesta.

Herramientas automáticas

Pros:

  • 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 necesita para 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 comandos realmente poderosa: cambiar directorios de instalación, desinstalar, renombrar binarios …
  • Si apunta a Unix, empaquetar fuentes con esta herramienta es realmente conveniente.

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.
  • El uso de la marca recursiva es omnipresente en los proyectos heredados. Automake admite compilaciones no recursivas, pero no es un enfoque muy utilizado.

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

  • El sitio web aquí
  • El libro aqui

La primera fuente lo pondrá en funcionamiento 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 autotools. Probé waf en lugar de cmake al principio. Creo que está diseñado en exceso en el sentido de que tiene una API de programación orientada a objetos completa. Los scripts no parecían cortos en absoluto y era realmente confuso para mí las cosas del directorio de trabajo y las 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.

Tu p

Pros

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

Contras

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

Con todo, las únicas cosas que estoy considerando ahora para nuevos proyectos son Cmake y Meson. Cuando tenga la oportunidad, probaré tup 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. Utilice CMake.

¿Por qué? Windows no tiene un sh.exe nativo y la emulación es lenta. También es muy fácil equivocarse en la configuración. No estoy diciendo que sea imposible en CMake, pero CMake seguramente abstrae más, por lo 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 soportadas por CMake. CMake también integra pruebas, empaquetado, 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 en Windows, donde a menudo se niega a construir una biblioteca compartida, incluso, si cree que debería y podría. Los problemas de reubicación de la cadena de herramientas también son frecuentes con libtool, que puede buscar 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 de construcción genéricas y buenas.

Además, CMake tiene una salida en color 🙂 y buenos porcentajes de progreso.

PD: Acabo de tener algo de experiencia con CMake y autotools en Windows como usuario. CMake tiende a funcionar, las herramientas automáticas tienden a morderte la oreja cuando no estás mirando y te sonríe cuando falla debido a algún extraño error …

Te mostramos las comentarios y valoraciones de los usuarios

Tienes la opción de amparar nuestra publicación ejecutando un comentario y dejando una puntuación te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *