创建发布版本
除了开发,几乎所有项目都提供定期发布的源代码。这些是源代码的独立包(通常是 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
搜索结果如下