ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Meson 0.61.0 新特性实战指南:从 Windows 资源编译到符号链接安装

Meson 0.61.0 新特性实战指南:从 Windows 资源编译到符号链接安装 构建工具【免费下载链接】mesonThe Meson Build System项目地址https://gitcode.com/gh_mirrors/me/meson点击查看免费下载本篇技术指南系统梳理 Meson Build System 0.61.0 版本发布的核心新特性覆盖windows.compile_resources对多输出 CustomTarget 的支持、install_symlink符号链接安装、extract_objects()对生成源文件的扩展、sccache 缓存加速、Visual Studio 2022 后端以及meson rewrite对extra_files的改写能力。读完本文你将能够在实际项目中直接应用这些特性并理解其背后的源码实现与适用前提。一、版本背景与兼容性声明Meson 0.61.0 是一个功能扩展与弃用信号并存的重要版本。它一方面引入了多项实用的新 API另一方面提前公布了 Python 3.6 支持即将移除的计划。本节内容可直接在官方发布说明 Release-notes-for-0.61.0.md 中追溯。Python 3.6 支持终止预告Python 3.6 的最终版本为 3.6.152021 年 9 月发布该版本系列已正式进入 End-of-LifeEOL状态。当时唯一仍将 Python 3.5 作为默认 Python 的 LTS 发行版是 Ubuntu 18.04而该系统同时也提供 Python 3.8。Python 3.7 带来了多个对 Meson 有用的特性包括 future annotations、importlib.resources模块以及 dataclasses。因此Meson 0.62下一版本开始要求 Python 3.7 或更新版本从Meson 0.61 起在 Python 3.6 上运行任意meson命令时会打印NOTICE:提示告知用户这一变更。这是典型的提前一个版本预告策略让仍停留在 Python 3.6 的用户有时间迁移环境。二、windows.compile_resources支持多输出 CustomTarget在 0.61.0 之前Windows 模块的compile_resources只接受单个输出的 CustomTarget。本版本扩展为接受拥有多个输出的 CustomTarget并为每个输出分别创建一个 Windows 资源目标同时支持CustomTarget 的索引index作为参数。从源码看该能力在 mesonbuild/modules/windows.py 的get_names()生成器中实现对于build.CustomTargetIndex即ct2[0]这种写法会通过FeatureNew.single_use(windows.compile_resource CustomTargetIndex in positional arguments, 0.61.0, ...)标记为 0.61.0 新特性对于输出多于一个的 CustomTarget同样以FeatureNew.single_use(..., 0.61.0, ...)登记并通过枚举src.get_outputs()为每个输出生成{target_id}_{i}形式的唯一目标名避免命名冲突。官方文档给出的完整示例ct custom_target( multiple, output : [resource, another resource], ... ) ct2 custom_target( slice, output : [resource, not a resource], ... ) resources windows.compile_resources(ct, ct2[0])这里ct的两个输出都会被编译为资源目标而ct2只有索引[0]指向的那个输出即resource会被使用not a resource不会被编译。底层资源编译器分派compile_resources会根据检测到的资源编译器类型选择不同的输出后缀与参数见 mesonbuild/modules/windows.py资源编译器类型生成后缀参数形式说明rcMSVC 系.res/nologo /foOUTPUT INPUT.res可直接传给 LINKLINK 内部用 CVTRES 转为 COFF 对象windresMinGW.oINPUT OUTPUTld只支持对象文件故 windres 直接生成 COFF 对象其他.oINPUT -o OUTPUT兜底分支此外compile_resources还接受args附加参数、include_directories、depends、depend_files等 kwargs其中depends中的 CustomTarget 目录会自动加入 include 搜索路径确保生成的头文件或资源依赖可用。三、install_symlink安装符号链接0.61.0 引入了全新的install_symlink函数用于在安装阶段创建符号链接。函数签名与约束如下位置参数链接名称link namepointing_to链接指向的目标路径必填install_dir链接创建的目标目录必填链接名称不能包含路径分隔符链接将创建在install_dir目录下。官方文档示例install_symlink(target, pointing_to: ../bin/target, install_dir: /usr/sbin)该示例会在/usr/sbin下创建名为target的符号链接指向../bin/target典型应用场景是sbin目录下放置指向bin目录二进制文件的链接。源码级验证解释器侧实现位于 mesonbuild/interpreter/interpreter.py使用FeatureNew(install_symlink, 0.61.0)标记版本pointing_to与install_dir均为requiredTrue的字符串 kwargs函数构建build.SymlinkData(target, name, install_dir, ...)并追加到self.build.symlinks。SymlinkData定义在 mesonbuild/build.py。实际安装动作在 mesonbuild/minstall.py 的install_symlinks()中完成full_dst_dir get_destdir_path(destdir, fullprefix, s.install_path) full_link_name get_destdir_path(destdir, fullprefix, s.name) dm.makedirs(full_dst_dir, exist_okTrue) if self.do_symlink(s.target, full_link_name, destdir, full_dst_dir): self.did_install_something True注意install_symlink是解释期函数只有在meson install或DESTDIR安装执行时才真正创建链接。配合 Installation 文档中的安装流程使用即可。四、extract_objects()支持生成源文件0.61.0 之前extract_objects()以及extract_all_objects()的相关逻辑只能作用于已存在于源码树中的文件。本版本起CustomTarget 的输出和generator.process()返回的生成文件都可以直接传给extract_objects()从而把这些生成对象作为构建依赖链中的一环参与链接。源码层面mesonbuild/build.py 中通过FeatureNew.single_use(Generated sources for extract_objects, 0.61.0, self.subproject)进行能力登记说明该能力被正式标记为 0.61.0 特性。典型用法示例gen generator(prog, output: BASENAME.o, arguments: [-c, INPUT, -o, OUTPUT]) generated gen.process(a.c, b.c) exe executable(app, extract_objects(generated), ...)此处generated是generator.process()的返回值GeneratedList直接传入extract_objects()后生成的.o对象会参与最终可执行文件的链接。这一能力让代码生成 → 对象提取 → 选择性链接的工作流更加自然。五、meson rewrite支持extra_files改写meson rewrite是 Meson 内置的构建脚本重写器实现位于 mesonbuild/rewriter.py。0.61.0 为其增加了对目标extra_files列表的改写能力CLI 模式可以像操作源文件列表一样添加或移除extra_files。meson rewrite target target name/id {add_extra_files/rm_extra_files} [list of extra files]脚本模式JSON{ type: target, target: target name, operation: extra_files_add / extra_files_rm, sources: [list, of, extra, files, to, add, remove], }从源码看重写器在 mesonbuild/rewriter.py 的命令行解析中新增了add_extra_files与rm_extra_files操作脚本模式的合法操作集合在 mesonbuild/rewriter.py 中扩展为[src_add, src_rm, target_rm, target_add, extra_files_add, extra_files_rm, info]。当目标原本没有extra_fileskwargs 时重写器会自动创建一个新的extra_files参数见 mesonbuild/rewriter.py并借助算术节点old_extra_files chosen完成追加。meson rewrite target target info输出extra_files同步地目标的extra_files列表现在也包含在重写器的 target info 输出中与sources一样以文件路径列表形式呈现见 mesonbuild/rewriter.py。该行为在 CLI 与脚本模式下均生效便于脚本化检查目标当前挂载的额外文件。六、Visual Studio 2022 后端0.61.0 紧跟 Visual Studio 2022 的发布节奏新增了vs2022后端。其核心变化是引入了新的v143 平台工具集Platform Toolset。配置方式与既有后端一致meson setup builddir --backendvs2022源码层面mesonbuild/backend/vs2022backend.py 中的Vs2022Backend继承自Vs2010Backend并将platform_toolset设为v143、vs_version设为2022。这意味着生成的解决方案/工程文件面向 Visual Studio 2022 及其 v143 工具链用户可在此基础上继续使用meson compile、meson test等统一工作流参见 Commands。七、sccache 编译缓存支持Meson 此前已支持 CCache0.61.0 在此基础上加入了对sccacheMozilla 开源的编译缓存工具的同等支持。关键行为自动检测sccache 与 CCache 的检测逻辑位于 mesonbuild/envconfig.py优先级当两者同时可用时自动检测逻辑优先选择 sccache。# 手动显式指定缓存包装器 CCsccache clang meson setup builddir启用后sccache 会像 CCache 一样包裹编译器调用命中缓存时显著缩短重复构建时间。若希望强制使用 CCache 而非 sccache可通过环境变量或--wipe后重新配置的方式显式指定编译器包装。八、其他值得关注的变化run_command缺少check参数时的警告run_command的checkkwarg 当前默认值为false而 Meson 计划在未来的版本中将其默认值改为true。因此0.61.0 起直接书写run_command(cmd)会触发如下警告WARNING: You should add the boolean check kwarg to the run_command call. It currently defaults to false, but it will default to true in future releases of meson.建议从现在起为所有run_command显式传入check: true或check: false避免未来版本默认行为变化带来的隐患。backend_startup_project修复backend_startup_project不再会在指定项目不是 VS 解决方案中最后一个项目时错误地擦除最后一个项目。此修复保证了 VS 后端的启动项目配置行为符合直觉。refman 新增 man 手册页后端文档参考系统refman即函数与对象参考文档生成器新增了man 页面生成后端。对应实现位于 docs/refman/generatorman.py生成的 man 手册分FUNCTIONS与OBJECTS两部分分别收录全部 Meson 函数/方法以及对象信息方便在终端直接以man方式查阅参考文档。gnome 模块与 WrapDB 的配套更新与 0.61.0 同期引入的还有 mesonbuild/modules/gnome.py 中install_gir、install_typelib参数的显式化since0.61.0以及 mesonbuild/wrap/wraptool.py 新增的meson wrap update-db命令用于更新 WrapDB 可用项目列表。这些配套能力与本文主题同属 0.61.0 发布周期可一并查阅相关文档如 Wrap-dependency-system-manual.md深入了解。九、升级建议与兼容性清单基于以上特性从 0.60.x 升级到 0.61.0 时建议关注运行环境若在 Python 3.6 上运行会收到NOTICE:弃用提示请尽快迁移到 Python 3.7因为 0.62 将强制要求run_command调用检查所有调用点显式补充checkkwargCMake 子项目CMake 3.14 的 File API 依赖方已标记弃用旧 CMake Server API 支持将在未来移除建议将 CMake 子项目使用的 CMake 版本升级到 3.14新 API 试用install_symlink、多输出compile_resources、生成源extract_objects()、extra_files改写等均为向后兼容的新增能力可直接在新项目中采用。通过结合本文与 Release-notes.md 的全局发布脉络你可以把握 Meson 构建系统的发展方向并在升级时做到心中有数。赞分享构建工具【免费下载链接】mesonThe Meson Build System项目地址https://gitcode.com/gh_mirrors/me/meson点击查看免费下载相关推荐smithy-go 运行时与代码生成器全解析中间件栈、编码包与 GoWriter 模板体系smithy go 运行时与代码生成器全解析中间件栈、编码包与 GoWriter 模板体系 导读 本文以 smithy go 仓库的 AGENTS.md ht构建工具一站式高效构建浏览器心理学实验jsPsych框架专业指南一站式高效构建浏览器心理学实验jsPsych框架专业指南 在当今数字化研究时代如何在浏览器中创建专业的行为心理学实验成为了许多研究者的迫切需求。jsPsyc开发工具Rye 常见问题完全指南从 PyTorch 源配置到 Windows 符号链接的实战排查手册Rye 常见问题完全指南从 PyTorch 源配置到 Windows 符号链接的实战排查手册 Rye 是一个追求“无痛 Python 体验”Hassle F开发工具CLI上一篇欢迎使用MD Video下一篇gumbo-parser移动端适配终极指南UI框架选择与性能优化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表