Versión 1.3 do sistema de compilación Meson

Publicouse a versión do sistema de compilación Meson 1.3.0, que se usa para construír proxectos como X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME e GTK. O código Meson está escrito en Python e está licenciado baixo a licenza Apache 2.0.

O obxectivo clave de desenvolvemento de Meson é proporcionar un proceso de montaxe de alta velocidade combinado con comodidade e facilidade de uso. En lugar de facer, a compilación usa o conxunto de ferramentas Ninja de forma predeterminada, pero tamén se poden usar outros backends como xcode e VisualStudio. O sistema ten incorporado un controlador de dependencias multiplataforma que che permite usar Meson para crear paquetes para distribucións. As regras de montaxe están establecidas nunha linguaxe simplificada específica do dominio, son ben lexibles e comprensibles para o usuario (segundo a idea dos autores, o desenvolvedor debería dedicar un mínimo de tempo a escribir regras).

Admítese a compilación cruzada e a creación en Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS e Windows mediante GCC, Clang, Visual Studio e outros compiladores. É posible construír proxectos en varias linguaxes de programación, incluíndo C, C++, Fortran, Java e Rust. Admítese un modo de compilación incremental, no que só se reconstruíron os compoñentes que están directamente relacionados cos cambios realizados desde a última compilación. Meson pódese usar para xerar compilacións repetibles, onde a execución da compilación en diferentes ambientes dá lugar a executables completamente idénticos.

Principais innovacións de Meson 1.3:

  • Engadiuse a opción "werror: true" aos métodos de verificación do compilador compiler.compiles(), compiler.links() e compiler.run(), que trata as advertencias do compilador como erros (pódese usar para comprobar que o código está construído sen avisos). ).
  • Engadiuse o método has_define para comprobar a definición do símbolo mediante o preprocesador.
  • Engadiuse o parámetro macro_name á función configure_file(), engadindo protección de macros para conexións dobres a través de “#include” (“incluír gardas”), deseñado ao estilo das macros en linguaxe C (simplificando a creación de ficheiros de configuración con dinámicas). nomes de macros).
  • Engadiuse un novo formato de saída a configure_file() - JSON ("output_format: json").
  • Engadiuse a posibilidade de usar listas de valores aos parámetros c_std e cpp_std (por exemplo, "default_options: 'c_std=gnu11,c11′').
  • Nos módulos que usan CustomTarget para procesar ficheiros, engadiuse a capacidade de personalizar as mensaxes saídas pola utilidade ninja.
  • O build_target "jar" quedou en desuso e recoméndase a chamada "jar()".
  • Engadiuse o parámetro 'env' ao método generator.process() para establecer a variable de ambiente a través da cal o xerador procesará a entrada.
  • Ao especificar os nomes de destino de compilación asociados aos executables, permítese que sufixos como "executable('foo', 'main.c', name_suffix: 'bar')" xeren executables adicionais no mesmo directorio.
  • Engadiuse o parámetro "vs_module_defs" á función exectuable() para usar un ficheiro def que define a lista de funcións pasadas a shared_module().
  • Engadiuse o parámetro "default_options" á función find_program() para establecer as opcións predeterminadas para o subproxecto alternativo.
  • Engadiuse o método fs.relative_to(), que devolve a ruta relativa para o primeiro argumento, en relación co segundo, se existe a primeira ruta. Por exemplo, "fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')".
  • Engadiuse o parámetro following_symlinks ás funcións install_data(), install_headers() e install_subdir(); cando se establecen, séguense as ligazóns simbólicas.
  • Engadiuse un parámetro "fill" ao método int.to_string() para encher gradualmente a cadea con ceros ao principio. Por exemplo, chamar a message(n.to_string(fill: 3)) para n=4 producirá a cadea "004".
  • Engadiuse un novo obxectivo, clang-tidy-fix, que especifica executar a utilidade clang-tidy coa marca "-fix".
  • A capacidade de especificar o sufixo (TARGET_SUFFIX) do destino da montaxe ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]) engadiuse ao comando de compilación.
  • Engadiuse a variable de ambiente MESON_PACKAGE_CACHE_DIR para anular a ruta á caché do paquete (subproxectos/caché de paquetes), por exemplo, o que lle permite usar unha caché compartida en varios proxectos.
  • Engadiuse o comando "meson setup --clearcache" para borrar a caché persistente.
  • A compatibilidade coa palabra clave "requirida" engadiuse a todos os métodos de verificación do compilador "has_*", por exemplo, en lugar de "assert(cc.has_function('some_function'))" agora pode especificar "cc.has_function('some_function' , requirido: verdadeiro)”.
  • Engadiuse unha nova palabra clave, rust_abi, ás funcións shared_library(), static_library(), library() e shared_module(), que deberían usarse en lugar do obsoleto rust_crate_type.

Fonte: opennet.ru

Engadir un comentario