Versión 1.3 del sistema de compilación Meson

Se ha publicado el lanzamiento del sistema de compilación Meson 1.3.0, que se utiliza para compilar proyectos como X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME y GTK. El código de Meson está escrito en Python y tiene la licencia Apache 2.0.

El objetivo clave de desarrollo de Meson es proporcionar un proceso de ensamblaje de alta velocidad combinado con comodidad y facilidad de uso. En lugar de hacer, la compilación usa el kit de herramientas Ninja de forma predeterminada, pero también se pueden usar otros backends como xcode y VisualStudio. El sistema tiene un controlador de dependencia multiplataforma incorporado que le permite usar Meson para crear paquetes para distribuciones. Las reglas de ensamblaje se establecen en un lenguaje específico de dominio simplificado, son bien legibles y comprensibles para el usuario (según la idea de los autores, el desarrollador debe dedicar un mínimo de tiempo a escribir reglas).

Se admite la compilación cruzada y la compilación en Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS y Windows mediante GCC, Clang, Visual Studio y otros compiladores. Es posible construir proyectos en varios lenguajes de programación, incluidos C, C++, Fortran, Java y Rust. Se admite un modo de compilación incremental, en el que solo se reconstruyen los componentes que están directamente relacionados con los cambios realizados desde la última compilación. Meson se puede usar para generar compilaciones repetibles, donde ejecutar la compilación en diferentes entornos da como resultado ejecutables completamente idénticos.

Principales novedades de Meson 1.3:

  • Se agregó la opción "werror: true" a los métodos de verificación del compilador compilador.compiles(), compilador.links() y compilador.run(), que trata las advertencias del compilador como errores (se puede usar para verificar que el código se haya compilado sin advertencias). ).
  • Se agregó el método has_define para verificar la definición del símbolo por preprocesador.
  • Se agregó el parámetro macro_name a la función configure_file(), agregando protección de macros para conexiones dobles a través de “#include” (“include guards”), diseñado al estilo de las macros en lenguaje C (simplificando la creación de archivos de configuración con dinámica nombres de macros).
  • Se ha agregado un nuevo formato de salida a configure_file() - JSON ("output_format: json").
  • Se agregó la capacidad de usar listas de valores a los parámetros c_std y cpp_std (por ejemplo, “default_options: 'c_std=gnu11,c11′’).
  • En los módulos que utilizan CustomTarget para procesar archivos, se ha agregado la capacidad de personalizar los mensajes generados por la utilidad ninja.
  • El "jar" build_target ha quedado obsoleto y en su lugar se recomienda la llamada "jar()".
  • El parámetro 'env' se ha agregado al método generador.process() para establecer la variable de entorno a través de la cual el generador procesará la entrada.
  • Al especificar nombres de destino de compilación asociados con ejecutables, se permiten sufijos como "executable('foo', 'main.c', name_suffix: 'bar')" para generar ejecutables adicionales en el mismo directorio.
  • Se agregó el parámetro “vs_module_defs” a la función ejecutable() para usar un archivo def que define la lista de funciones pasadas ashared_module().
  • Se agregó el parámetro 'default_options' a la función find_program() para establecer las opciones predeterminadas para el subproyecto alternativo.
  • Se agregó el método fs.relative_to(), que devuelve la ruta relativa para el primer argumento, relativa al segundo, si la primera ruta existe. Por ejemplo, "fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')".
  • El siguiente parámetro_symlinks se ha agregado a las funciones install_data(), install_headers() e install_subdir(); cuando se establece, se siguen los enlaces simbólicos.
  • Se agregó un parámetro de "relleno" al método int.to_string() para llenar incrementalmente la cadena con ceros a la izquierda. Por ejemplo, llamar a message(n.to_string(fill: 3)) para n=4 producirá la cadena "004".
  • Se agregó un nuevo objetivo, clang-tidy-fix, que especifica la ejecución de la utilidad clang-tidy con el indicador "-fix".
  • La capacidad de especificar el sufijo (TARGET_SUFFIX) del destino del ensamblado ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]) se ha agregado al comando de compilación.
  • Se agregó la variable de entorno MESON_PACKAGE_CACHE_DIR para anular la ruta al caché del paquete (subproyectos/paquetecache), por ejemplo, permitiéndole usar un caché compartido en varios proyectos.
  • Se agregó el comando "meson setup --clearcache" para borrar el caché persistente.
  • Se ha agregado soporte para la palabra clave "required" a todos los métodos de verificación del compilador "has_*", por ejemplo, en lugar de "assert(cc.has_function('some_function'))", ahora puede especificar "cc.has_function('some_function' , requerido: verdadero)”.
  • Se ha agregado una nueva palabra clave, Rust_abi, a las funciones Shared_Library(), static_library(), Library() y Shared_module(), que debe usarse en lugar del obsoleto Rust_crate_type.

Fuente: opennet.ru

Añadir un comentario