Meson ( / m ɛ . S ɒ n / ) [2] es una herramienta de software para la automatización del edificio (compilación) de software. El objetivo general de Meson es promover la productividad de los programadores. [3] Meson es un software gratuito y de código abierto escrito en Python , bajo la licencia Apache 2.0 . [4]
Desarrollador (es) | Jussi Pakkanen |
---|---|
Versión inicial | 2 de marzo de 2013 |
Lanzamiento estable | 0.58.0 / 2 de mayo de 2021 [1] |
Repositorio | |
Escrito en | Pitón |
Sistema operativo | Multiplataforma |
Tipo | Herramientas de desarrollo de software |
Licencia | Licencia Apache 2.0 |
Sitio web | mesonbuild |
Interoperabilidad
Al estar escrito en Python, Meson se ejecuta de forma nativa en sistemas operativos similares a Unix , incluido macOS , así como Microsoft Windows y en otros sistemas operativos.
Meson soporta 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 es compatible con GNU Compiler Collection , Clang , Microsoft Visual C ++ y otros compiladores. El proyecto usa ninja como el sistema de compilación de backend principal, pero también puede usar Microsoft Visual Studio o backends de 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ñado de tal manera que se puede reimplementar en cualquier otro lenguaje; [6] por ejemplo, Meson ++ [7] 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. [6] En cambio, los pasos de compilación arbitrarios más allá de la compilación de lenguajes compatibles se pueden representar como destinos personalizados.
El lenguaje Meson está fuertemente tipado , de modo que los tipos integrados como biblioteca, ejecutable, cadena y listas de los mismos, no son intercambiables. [8] En particular, a diferencia de Make, el tipo de lista no divide cadenas en espacios en blanco. [6] Por lo tanto, los espacios en blanco y otros caracteres en los nombres de archivo y los argumentos del programa se manejan de manera limpia.
Mesón | CMake | Fabricar | |
---|---|---|---|
Tipos de datos | sí | No | No |
Tipo de datos de lista | sí | cadena delimitada por punto y coma | cadena delimitada por espacios en blanco |
Tipo de datos del diccionario | desde 0.47.0 | No | No |
Globbing de archivos | No | sí | sí |
Ampliable mediante funciones personalizadas | No | sí | sí |
Puede leer la salida de comandos arbitrarios (en el momento de la configuración) | comando_correr | sí | sí |
Puede ejecutar comandos arbitrarios en el momento de la compilación como recetas de objetivos personalizados | sí | sí | sí |
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 cada vez que el usuario se ve obligado a hacer una compilación limpia).
A diferencia de bare Make, 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 las compilaciones posteriores, lo que provocaría una compilación obsoleta.
Al igual que Ninja, Meson no admite el agrupamiento de archivos fuente. [6] Al requerir que todos los archivos de origen 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 de origen ha cambiado, lo que garantiza que se detecten los archivos de origen eliminados. CMake admite el globbing, pero recomienda no hacerlo por la misma razón. [9]
Meson usa ccache automáticamente si está instalado. También detecta cambios en las tablas de símbolos de las bibliotecas compartidas para omitir la vinculación de los ejecutables con la biblioteca cuando no hay cambios ABI . Se admiten los encabezados precompilados , pero requieren configuración. Las compilaciones de depuración no tienen optimización de forma predeterminada.
característica de velocidad | Mesón | CMake | Fabricar |
---|---|---|---|
Prohíbe las compilaciones obsoletas (reconstrucción parcial contra el cambio de entrada) | Sí (a menos que haya errores) | Si no se globalizan los archivos de origen | Make recursivo (un patrón idiomático) se rompe a este respecto [10] |
El destino que ejecuta las pruebas depende de las pruebas que se están construyendo (por ejemplo, la prueba depende de todas ) | sí | No, y add_dependencies (probar todo) está prohibido, porque el objetivo de prueba está reservado. [11] | Trivial de agregar |
Ccaché | Automático | Trivial de agregar | Trivial de agregar |
Distcc | Trivial de agregar | Trivial de agregar | Trivial de agregar |
Reenlazamiento consciente de la tabla de símbolos | sí | Hazlo tu mismo | Hazlo tu mismo |
Encabezados precompilados | Opcional | CMake ≥ 3,16 [12] [2] | Hazlo tu mismo |
Características
Un objetivo declarado de Meson es facilitar las prácticas de desarrollo modernas. Como tal, Meson sabe cómo hacer compilaciones unitarias , compilar con cobertura de prueba , optimizar el tiempo de enlace , etc. sin que el programador tenga que escribir soporte para esto.
Mesón | CMake | Herramientas automáticas | |
---|---|---|---|
Genera un configure guion | No | No | hacer dist |
Establezca el directorio de instalación de la biblioteca correcto en x86_64 Unix | Automático | No estandarizado | ./configure --libdir=/usr/lib64 |
Subproyectos
Meson puede buscar y usar dependencias externas automáticamente a través de pkg-config , pero esto solo encuentra dependencias instaladas, sobre las cuales Meson no puede hacer nada. Alternativamente, o como respaldo, 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. [13] Esto permite que Meson resuelva el infierno de dependencias para la conveniencia de los usuarios ocasionales que quieran compilar el proyecto, pero pueden contribuir a la saturación del software si se hubiera podido utilizar una dependencia instalada común. Por tanto, el modo preferido por los empaquetadores de Linux es el de reserva. [14]
Meson es compatible con los subproyectos Meson y CMake. Un archivo de compilación de Meson también puede hacer referencia al servicio WrapDB. [13]
- Comparación de casos de uso de resolución de dependencias en diferentes sistemas de compilación
caso de uso | Mesón | CMake | Carga |
---|---|---|---|
Encontrar dependencias instaladas | pkg-config, paquetes CMake | Módulo CMake, pkg-config | ? |
Descarga de dependencias automáticamente | subproyecto | FetchContent [15] | Dependencia de la carga |
Encontrar dependencias instaladas, con respaldo de descarga | pkg-config + subproyecto | Módulo CMake / pkg-config + FetchContent | ? |
generador de archivos pkg-config | sí | No | No |
Facilitar el uso como dependencia de descarga automática | Puede usarse como un subproyecto Meson | No | Con registro en crates.io |
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. [dieciséis]
Adoptadores
GNOME se ha fijado el objetivo de trasladar sus proyectos a Meson. [17] A finales de 2017, GNOME Shell requiere exclusivamente Meson después de abandonar Autotools, [18] y componentes centrales como GTK + , Clutter-GTK , GLib y GStreamer se pueden construir con Meson. [17]
Systemd confía en Meson desde que lanzó Autotools en la versión 234. [19]
También X.Org [20] y Mesa [21] fueron portados a Meson.
La página de inicio de Meson enumera otros proyectos que utilizan Meson. [22]
Ver también
- Lista de software de automatización de compilación § Generación de scripts de compilación
Referencias
- ^ "Liberaciones - mesonbuild / meson" . Consultado el 14 de febrero de 2021 , a través de GitHub .
- ^ a b "Hacer que los sistemas de construcción no sean una mierda (video linux.conf.au)" .
- ^ "Sistema de construcción de alta productividad" .
Meson tiene como objetivo optimizar la productividad del programador proporcionando soporte simple y listo para usar para prácticas y herramientas de desarrollo de software modernas, como pruebas unitarias, informes de cobertura, Valgrind, CCache y similares.
- ^ "mesonbuild / meson: el sistema de construcción Meson" . GitHub . Consultado el 13 de abril de 2016 .
- ^ "Manual de referencia" .
- ^ a b c d "Preguntas frecuentes sobre Meson" .
- ^ Baker, Dylan (28 de mayo de 2021), dcbaker / meson-plus-plus , consultado el 28 de mayo de 2021
- ^ "Sintaxis de mesón" .
- ^ "Comando CMake FILE" .
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.
- ^ "No recursivo hacer considerado nocivo" (PDF) .
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í.
- ^ "Hacer prueba no depende de hacer todo" . Rastreador de problemas de kitware . 23 de junio de 2016 . Consultado el 3 de septiembre de 2020 .
- ^ "Soporte de CMake para encabezados precompilados" . Consultado el 13 de marzo de 2018 .
- ^ a b "Envuelva el manual del sistema de dependencia" .
- ^ "Meson y dependencias de terceros. Solo una forma correcta" .
- ^ https://cmake.org/cmake/help/v3.15/module/FetchContent.html
- ^ "Compilación cruzada" .
- ^ a b "Objetivo de GNOME: módulos de puerto para usar el sistema de compilación Meson" .
- ^ "GNOME 3.26 Beta debuta: más portabilidad de Meson, acción de Wayland" .
- ^ "Suelta el soporte para autotools" .
- ^ "El soporte de Meson ha aterrizado en el servidor X.Org" .
- ^ "Los desarrolladores de Mesa se acercan a dejar caer el sistema de compilación de Autotools a favor de Meson" .
- ^ "Lista de proyectos que utilizan Meson" .
enlaces externos
- Página web oficial