介子构建系统版本 1.3

Meson 1.3.0构建系统已经发布,用于构建X.Org Server、Mesa、Lighttpd、systemd、GStreamer、Wayland、GNOME和GTK等项目。 Meson 的代码是用 Python 编写的,并根据 Apache 2.0 许可证获得许可。

Meson 开发的主要目标是提供高速的组装过程以及便利性和易用性。 构建时默认使用 Ninja 工具包而不是 make 实用程序,但也可以使用其他后端,例如 xcode 和 VisualStudio。 系统有一个内置的多平台依赖处理程序,允许您使用 Meson 构建分发包。 汇编规则以简化的特定于域的语言指定,对于用户来说具有高度的可读性和可理解性(正如作者的意图,开发人员应该花费最少的时间编写规则)。

支持使用 GCC、Clang、Visual Studio 和其他编译器在 Linux、Illumos/Solaris、FreeBSD、NetBSD、DragonFly BSD、Haiku、macOS 和 Windows 上交叉编译和构建。 可以使用各种编程语言构建项目,包括 C、C++、Fortran、Java 和 Rust。 支持增量构建模式,其中仅重建与上次构建以来所做的更改直接相关的组件。 Meson 可用于生成可重复的构建,其中在不同的环境中运行构建会生成完全相同的可执行文件。

Meson 1.3的主要创新点:

  • 在编译器检查方法compiler.compiles()、compiler.links()和compiler.run()中添加了选项“werror: true”,它将编译器警告视为错误(可用于检查代码是否在没有警告的情况下构建) )。
  • 添加了 has_define 方法来通过预处理器检查符号定义。
  • configure_file()函数中增加了macro_name参数,通过“#include”(“includeguards”)为双连接添加宏保护,采用C语言中宏的风格设计(简化了动态配置文件的创建)宏名称)。
  • configure_file() 中添加了新的输出格式 - JSON(“output_format: json”)。
  • 向 c_std 和 cpp_std 参数添加了使用值列表的功能(例如,“default_options: 'c_std=gnu11,c11′'”)。
  • 在使用 CustomTarget 处理文件的模块中,添加了自定义 ninja 实用程序输出的消息的功能。
  • build_target“jar”已被弃用,建议使用“jar()”调用。
  • Generator.process() 方法中添加了 'env' 参数来设置生成器处理输入的环境变量。
  • 当指定与可执行文件关联的构建目标名称时,允许使用“executable('foo', 'main.c', name_suffix: 'bar')”等后缀在同一目录中生成其他可执行文件。
  • 向 exectuable() 函数添加了“vs_module_defs”参数,以使用定义传递给 shared_module() 的函数列表的 def 文件。
  • 向 find_program() 函数添加了“default_options”参数,以设置后备子项目的默认选项。
  • 添加了 fs.relative_to() 方法,如果第一个路径存在,则返回第一个参数相对于第二个参数的相对路径。 例如,“fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')”。
  • follow_symlinks 参数已添加到 install_data()、install_headers() 和 install_subdir() 函数中;设置后,将遵循符号链接。
  • int.to_string() 方法中添加了“fill”参数,以增量方式用前导零填充字符串。 例如,对于 n=3 调用 message(n.to_string(fill: 4)) 将生成字符串“004”。
  • 添加了一个新目标 clang-tidy-fix,它指定使用“-fix”标志运行 clang-tidy 实用程序。
  • 编译命令中添加了指定程序集目标 ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]) 后缀 (TARGET_SUFFIX) 的功能。
  • 添加了环境变量 MESON_PACKAGE_CACHE_DIR 以覆盖包缓存 (subprojects/packagecache) 的路径,例如,允许您在多个项目中使用共享缓存。
  • 添加了“meson setup --clearcache”命令来清除持久缓存。
  • 对“required”关键字的支持已添加到所有“has_*”编译器检查方法中,例如,您现在可以指定“cc.has_function('some_function'”,而不是“assert(cc.has_function('some_function'))” ,必需:true)”。
  • 一个新的关键字 rust_abi 已添加到shared_library()、static_library()、library() 和shared_module() 函数中,应该使用它来代替已弃用的rust_crate_type。

来源: opennet.ru

添加评论