创建发布版本

除了开发,几乎所有项目都提供定期发布的源代码。这些是源代码的独立包(通常是 tar 或 zip 格式)。它们不包含任何版本控制元数据,只包含源代码。Meson 提供了一种简单的方法来生成这些代码,使用 meson dist 命令。

Meson 提供了一种简单的方法来生成这些代码。它包含一个简单的命令(自 0.52.0 版本起可用)

meson dist

或者另一种方式(在使用 ninja 后端的旧版 Meson 版本中)

ninja dist

这将在构建树的子目录 meson-dist 中创建一个名为 projectname-version.tar.xz 的文件。该归档文件包含版本控制中最新提交的全部内容,包括所有子模块(递归地)。所有版本控制元数据都将被删除。然后,Meson 会获取此归档文件,并通过完整的 compile + test + install 周期测试其是否有效。如果所有这些测试都通过,Meson 还会在归档文件旁边创建一个 SHA-256 校验和文件。

Autotools dist 与 Meson dist

Meson 的行为不同于 Autotools。Autotools 的 "dist" 目标打包当前的源代码树。Meson 打包最新的版本控制提交。这样做的原因是防止开发人员进行意外发布,在发布的归档文件与版本控制中的任何提交(尤其是为发布打标签的提交)不匹配的情况下(尤其是为发布打标签的提交)。

在您的发布版本中包含子项目

meson dist 命令具有 --include-subprojects 命令行选项。启用此选项后,当前构建使用的所有子项目的源代码树也将包含在最终的 tarball 中。这对于分发可以在离线状态下构建的自包含 tarball 很有用(例如 --wrap-mode=nodownload)。

使用 --no-tests 跳过构建和测试

meson dist 命令具有 --no-tests 选项,用于跳过生成的包的构建和测试步骤。例如,在 CI 中,如果 CI 已经进行了自己的测试,则可以使用此选项来避免浪费时间。

因此,使用 --no-tests,您可以告诉 Meson “不要构建和测试生成的包”。

使用 --allow-dirty 覆盖 git 仓库包含未提交更改时的错误

自 0.62.0 版本起,Meson 不会再发出警告,而是会发出错误消息通知用户并立即退出,因为仓库包含未提交的更改。如果 --allow-dirty 作为 meson dist 的选项给出,则会发出警告,Meson 会照常继续执行。

单独发布子项目

自 0.57.0 版本起meson dist 命令现在可以为与主项目位于同一个 git 仓库中的子项目创建分发 tarball。如果项目的一部分(例如库)可以单独构建和分发,这会很有用。在这种情况下,可以将它们移动到 subprojects/mysub 中,并在该目录中运行 meson dist,现在将创建一个 tarball,其中只包含来自该子目录的源代码,而不包含主项目的其余部分或其他子项目。

例如

git clone https://github.com/myproject
cd myproject/subprojects/mysubproject
meson setup builddir
meson dist -C builddir

这会生成 builddir/meson-dist/mysubproject-1.0.tar.xz tarball。

固定从 VCS 获取的版本

自 1.4.0 版本起meson dist 命令可以重写分发 tarball 的构建配置。当配置依赖于来自版本控制的元数据(例如以下示例)时,这是必需的。

meson.build:

project('tig', 'c',
  version : run_command('version.sh', 'get-vcs').stdout.strip())

meson.add_dist_script('version.sh', 'set-dist', meson.project_version())

version.sh:

#!/bin/sh

if [ "$1" = "get-vcs" ]; then
  git -C "$MESON_SOURCE_ROOT" describe --always --dirty
elif [ "$1" = "set-dist" ]; then
  $MESONREWRITE --sourcedir="$MESON_PROJECT_DIST_ROOT" kwargs set project / version "$2"
else
  exit 1
fi

搜索结果如下