stringtranslate.com

Mesón (software)

Meson ( / ˈ m ɛ . s ɒ n / ) [2] es una herramienta de software para automatizar la construcción (compilación) de software. Meson adopta un enfoque de convención sobre configuración , promoviendo prácticas y herramientas de desarrollo estándar en lugar de brindar flexibilidad ilimitada al usuario. [3] Meson es un software gratuito y de código abierto escrito en Python , bajo la licencia Apache 2.0 . [4]

Interoperabilidad

Al estar escrito en Python, Meson se ejecuta en sistemas operativos similares a Unix , incluido macOS , así como en Microsoft Windows y otros sistemas operativos.

Meson admite los lenguajes C , C++ , CUDA , D , Objective-C , Fortran , Java , C# , Rust y Vala , [5] y tiene un mecanismo para manejar dependencias llamado Wrap.

Meson admite GNU Compiler Collection , Clang , Microsoft Visual C++ y otros compiladores, incluidos compiladores no tradicionales como Emscripten y Cython . [6] El proyecto utiliza ninja como sistema de construcción de backend principal, pero también puede usar backends de Microsoft Visual Studio o Xcode .

Idioma

La sintaxis de los archivos de descripción de compilación de Meson (el lenguaje Meson) toma prestada de Python , pero no es Python: está diseñada de manera que pueda reimplementarse en cualquier otro lenguaje; [7] por ejemplo, muon [8] es una implementación de C y Meson++ [9] es una implementación de C++. La dependencia de Python es un detalle de implementación.

El lenguaje Meson no es intencionalmente completo en Turing y, por lo tanto, no puede expresar un programa arbitrario. [7] En cambio, los pasos de compilación arbitrarios más allá de la compilación de idiomas compatibles se pueden representar como objetivos personalizados.

El lenguaje Meson está fuertemente tipado , de modo que los tipos integrados como biblioteca, ejecutable, cadena y sus listas no son intercambiables. [10] En particular, a diferencia de Make, el tipo de lista no divide cadenas en espacios en blanco. [7] Por lo tanto, los espacios en blanco y otros caracteres en los nombres de archivos y argumentos del programa se manejan limpiamente.

Rapidez y corrección

Como ocurre con cualquier sistema de compilación típico, las compilaciones incrementales correctas son la característica de velocidad más importante (porque todo el progreso incremental se descarta cada vez que se obliga al usuario a realizar una compilación limpia).

A diferencia de Make simple, el paso de configuración independiente garantiza que los cambios en los argumentos, las variables de entorno y la salida del comando no se apliquen parcialmente en compilaciones posteriores, lo que conduciría a una compilación obsoleta.

Al igual que Ninja, Meson no admite la transferencia global de archivos fuente. [7] Al requerir que todos los archivos fuente se enumeren en los archivos de definición de compilación, las marcas de tiempo del archivo de definición de compilación son suficientes para determinar si el conjunto de archivos fuente ha cambiado, garantizando así que se detecten los archivos fuente eliminados. CMake admite el globbing, pero lo desaconseja por el mismo motivo. [11]

Meson usa ccache automáticamente si está instalado. También detecta cambios en las tablas de símbolos de bibliotecas compartidas para omitir la vinculación de ejecutables con la biblioteca cuando no hay cambios en ABI . Se admiten encabezados precompilados , pero requieren configuración. Las compilaciones de depuración no tienen optimización de forma predeterminada.

Características

Un objetivo declarado de Meson es facilitar las prácticas de desarrollo modernas. Como tal, Meson sabe cómo hacer compilaciones unitarias , compilaciones con cobertura de prueba , optimización del tiempo de enlace , etc. sin que el programador tenga que escribir soporte para esto.

Subproyectos

Meson puede encontrar y usar automáticamente dependencias externas a través de pkg-config , CMake y búsquedas específicas del proyecto, [15] pero esto solo encuentra dependencias instaladas, sobre las cuales Meson no puede hacer nada. Alternativamente, o como alternativa, se puede proporcionar una dependencia como un subproyecto : un proyecto Meson dentro de otro, ya sea contenido o como un enlace de descarga, posiblemente con parches. [16] Esto permite a Meson resolver el infierno de dependencias para comodidad de los usuarios ocasionales que desean compilar el proyecto, pero puede contribuir a la sobrecarga del software si se hubiera podido utilizar una dependencia instalada común en su lugar. Por lo tanto , el modo preferido por los empaquetadores de Linux es el de reserva. [17]

Meson apoya los subproyectos Meson y CMake. Un archivo de compilación de Meson también puede hacer referencia al servicio WrapDB. [16]

Comparación de casos de uso de resolución de dependencias en diferentes sistemas de compilación

compilación cruzada

La compilación cruzada requiere una configuración adicional, que Meson admite en forma de un archivo cruzado separado , que puede ser externo al proyecto Meson. [19]

Adoptantes

GNOME se ha propuesto portar sus proyectos a Meson. [20] A finales de 2017, GNOME Shell requiere exclusivamente Meson después de abandonar Autotools , [21] y componentes centrales como GTK+ , Clutter-GTK , GLib y GStreamer se pueden construir con Meson. [20]

Muchos proyectos de freedesktop.org han cambiado a Meson. Systemd confía en Meson desde que eliminó Autotools en la versión 234, [22] y también X.Org [23] y Mesa [24] fueron portados a Meson.

El soporte de Meson para Fortran y Cython se mejoró para ayudar a varios proyectos científicos en su cambio de herramientas de configuración a Meson, por ejemplo SciPy . [25] Meson también se puede utilizar como backend PEP517 para construir ruedas Python , a través del paquete meson-python . [26]

Otros proyectos notables que utilizan Meson incluyen QEMU y PostgreSQL ; La página de inicio de Meson enumera más proyectos que utilizan Meson. [27]

Ver también

Referencias

  1. ^ "Versión 1.5.0". 10 de julio de 2024 . Consultado el 23 de julio de 2024 .
  2. ^ ab "Hacer que los sistemas de compilación no apesten (video de linux.conf.au)". YouTube .
  3. ^ "Sistema de construcción de alta productividad". Meson tiene como objetivo optimizar la productividad del programador al brindar soporte simple y listo para usar para herramientas y prácticas modernas de desarrollo de software, como pruebas unitarias, informes de cobertura, Valgrind, CCache y similares.
  4. ^ "mesonbuild/meson: el sistema de construcción de Meson". GitHub . Consultado el 13 de abril de 2016 .
  5. ^ "Manual de referencia".
  6. ^ "ID del compilador".
  7. ^ abcd "Preguntas frecuentes sobre mesón".
  8. ^ "muon.build" . Consultado el 27 de enero de 2023 .
  9. ^ Baker, Dylan (28 de mayo de 2021). "dcbaker/meson-plus-plus" . Consultado el 28 de mayo de 2021 .
  10. ^ "Sintaxis del mesón".
  11. ^ "Comando CMake ARCHIVO". Nota: No recomendamos utilizar GLOB para recopilar una lista de archivos fuente de su árbol de fuentes. Si ningún archivo CMakeLists.txt cambia cuando se agrega o elimina una fuente, el sistema de compilación generado no puede saber cuándo pedirle a CMake que se regenere.
  12. ^ "Hacer no recursivo se considera perjudicial" (PDF) . Microsoft . El Make recursivo se considera perjudicial por muy buenas razones (Miller 1998); No es posible realizar un seguimiento preciso de las dependencias cuando el sistema de compilación está formado por componentes separados que se invocan entre sí.
  13. ^ "Hacer la prueba no depende de hacer todo". Rastreador de problemas de kitware . 23 de junio de 2016 . Consultado el 3 de septiembre de 2020 .
  14. ^ "Soporte CMake para encabezados precompilados" . Consultado el 13 de marzo de 2018 .
  15. ^ "Dependencias con funcionalidad de búsqueda personalizada: documentación de Meson".
  16. ^ ab "Manual del sistema de dependencia Wrap".
  17. ^ "Meson y dependencias de terceros. Sólo una forma correcta".
  18. ^ "FetchContent - Documentación de CMake 3.15.7".
  19. ^ "Compilación cruzada".
  20. ^ ab "Objetivo de GNOME: puertos de módulos para utilizar el sistema de compilación Meson".
  21. ^ "Debut de GNOME 3.26 Beta: más portabilidad de Meson, acción de Wayland".
  22. ^ "Eliminar el soporte para herramientas automáticas". GitHub .
  23. ^ "El soporte de Meson ha llegado al servidor X.Org".
  24. ^ "Los desarrolladores de Mesa se acercan a abandonar el sistema de compilación Autotools en favor de Meson".
  25. ^ "Cómo construir SciPy con Meson".
  26. ^ "paquete mesón-python en PyPI".
  27. ^ "Lista de proyectos que utilizan Meson".

Enlaces externos