stringtranslate.com

Meson (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 herramientas y prácticas de desarrollo estándar en lugar de proporcionar flexibilidad ilimitada al usuario. [3] Meson es un software libre 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 tipo Unix , incluido macOS , así como Microsoft Windows y otros sistemas operativos.

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

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 el sistema de compilació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 tal manera que se puede reimplementar 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 Turing-completo intencionalmente 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 lenguajes compatibles se pueden representar como objetivos personalizados.

El lenguaje Meson está fuertemente tipado , de modo que los tipos incorporados como biblioteca, ejecutable, cadena y listas de los mismos no son intercambiables. [10] En particular, a diferencia de Make, el tipo de lista no divide las 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

Al igual que con cualquier sistema de compilación típico, las compilaciones incrementales correctas son la característica de velocidad más significativa (porque todo el progreso incremental se descarta cuando el usuario se ve obligado a realizar una compilación limpia).

A diferencia de Make simple, el paso de configuración separado 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 daría lugar a una compilación obsoleta.

Al igual que Ninja, Meson no admite la inclusión de archivos fuente en globs . [7] Al exigir que todos los archivos fuente se incluyan en los archivos de definición de compilación, las marcas de tiempo de los archivos de definición de compilación son suficientes para determinar si el conjunto de archivos fuente ha cambiado, lo que garantiza que se detecten los archivos fuente eliminados. CMake admite la inclusión de archivos fuente en globs, pero lo desaconseja por la misma razón. [11]

Meson utiliza ccache automáticamente si está instalado. También detecta cambios en las tablas de símbolos de las bibliotecas compartidas para evitar volver a vincular los ejecutables con la biblioteca cuando no hay cambios en la 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 de Unity , compilaciones con cobertura de pruebas , 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 una alternativa, una dependencia puede proporcionarse 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 la conveniencia de los usuarios ocasionales que quieren compilar el proyecto, pero puede contribuir a la hinchazón del software si se hubiera podido usar una dependencia instalada común en su lugar. Por lo tanto, el modo preferido por los empaquetadores de Linux es el de alternativa. [17]

Meson admite subproyectos de 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 puesto como objetivo 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 migrado a Meson. Systemd depende de Meson desde que abandonó Autotools en la versión 234 [22] , y también X.Org [23] y Mesa [24] fueron migrados a Meson.

Se mejoró el soporte de Meson para Fortran y Cython para ayudar a varios proyectos científicos en su transición de setuptools a Meson, por ejemplo SciPy . [25] Meson también se puede utilizar como un 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 otros proyectos que utilizan Meson. [27]

Véase también

Referencias

  1. ^ "Versión 1.6.0". 20 de octubre de 2024. Consultado el 22 de octubre de 2024 .
  2. ^ ab "Cómo hacer que los sistemas de compilación no sean una basura (video de linux.conf.au)". YouTube .
  3. ^ "Sistema de compilación de alta productividad". Meson tiene como objetivo optimizar la productividad de los programadores al brindar soporte simple y listo para usar para herramientas y prácticas de desarrollo de software modernas, como pruebas unitarias, informes de cobertura, Valgrind, CCache y similares.
  4. ^ "mesonbuild/meson: El sistema de compilación Meson". GitHub . Consultado el 13 de abril de 2016 .
  5. ^ "Manual de referencia".
  6. ^ "ID del compilador".
  7. ^ abcd "Preguntas frecuentes sobre Meson".
  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 FILE". Nota: No recomendamos utilizar GLOB para recopilar una lista de archivos fuente de su árbol de fuentes. Si no se modifica ningún archivo CMakeLists.txt cuando se agrega o elimina una fuente, el sistema de compilación generado no puede saber cuándo solicitarle a CMake que se regenere.
  12. ^ "Make no recursivo considerado dañino" (PDF) . Microsoft . Make recursivo se considera dañino por muy buenas razones (Miller 1998); no es posible rastrear con precisión las dependencias cuando el sistema de compilación está construido con componentes separados que se invocan entre sí.
  13. ^ "Hacer una prueba no depende de hacer todo". Rastreador de problemas de Kitware . 23 de junio de 2016. Consultado el 3 de septiembre de 2020 .
  14. ^ "Compatibilidad de CMake con 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 de envoltura".
  17. ^ "Meson y dependencias de terceros. Solo una forma correcta".
  18. ^ "FetchContent — Documentación de CMake 3.15.7".
  19. ^ "Recopilación cruzada".
  20. ^ ab "Objetivo de GNOME: portar módulos para utilizar el sistema de compilación Meson".
  21. ^ "Se estrena la versión beta de GNOME 3.26: más portabilidad de Meson, acción de Wayland".
  22. ^ "Eliminar soporte para herramientas automáticas". GitHub .
  23. ^ "El soporte de Meson ha llegado al servidor X.Org".
  24. ^ "Los desarrolladores de Mesa están más cerca de abandonar el sistema de compilación Autotools en favor de Meson".
  25. ^ "Cómo construir SciPy con Meson".
  26. ^ "paquete meson-python en PyPI".
  27. ^ "Lista de proyectos que utilizan Meson".

Enlaces externos