建立發行版本

除了開發之外,幾乎所有專案都會定期提供原始碼發行版本。這些是原始碼的獨立封裝(通常是 tar 或 zip 格式)。它們不包含任何版本控制元數據,只有原始碼。 Meson 提供了一種簡單的方法來生成這些,使用 meson dist 命令。

Meson 提供了一種簡單的方法來生成這些。它由一個單一命令組成(自 0.52.0 版開始提供)

meson dist

或者(在較舊的 Meson 版本中使用 ninja 後端)

ninja dist

這會在建置樹子目錄 meson-dist 中建立一個名為 projectname-version.tar.xz 的檔案。此封存檔包含版本控制中最新 commit 的完整內容,包括所有子模組(遞迴)。所有版本控制元數據都會被移除。然後 Meson 會取得這個封存檔並透過執行完整的 compile + test + install 週期來測試它是否正常運作。如果所有這些都通過,Meson 將會在封存檔旁邊建立一個 SHA-256 檢查總和檔案。

Autotools dist VS Meson dist

Meson 的行為與 Autotools 不同。 Autotools 的 "dist" 目標是封裝目前的原始碼樹。 Meson 封裝最新的版本控制 commit。這樣做的原因是為了防止開發人員進行意外的發行版本,導致發行的封存檔與版本控制中的任何 commit 不符(特別是為發行版本標記的那個)。

在您的發行版本中包含子專案

meson dist 命令有一個 --include-subprojects 命令列選項。啟用後,目前建置所使用的所有子專案的原始碼樹也會包含在最終的壓縮檔中。這對於發行可以離線建置的自我包含壓縮檔非常有用(例如 --wrap-mode=nodownload)。

使用 --no-tests 跳過建置和測試

meson dist 命令有一個 --no-tests 選項來跳過產生封裝檔的建置和測試步驟。當在 CI 中已經進行自己的測試時,可以使用它來節省時間。

因此,使用 --no-tests 您可以告訴 Meson「不要建置和測試產生的封裝檔」。

當 git 儲存庫包含未提交的變更時,使用 --allow-dirty 覆寫錯誤

自 0.62.0 版起,當儲存庫包含未提交的變更時,Meson 不會發出警告,而是會產生一則錯誤訊息通知使用者並立即退出。如果在 meson dist 中提供 --allow-dirty 作為選項,則會發出警告,而 Meson 將會照常進行。

單獨發行子專案

自 0.57.0 版起meson dist 命令現在可以為與主要專案位於相同 git 儲存庫中的子專案建立發行壓縮檔。如果專案的某些部分(例如程式庫)可以單獨建置和發行,這會非常有用。在這種情況下,它們可以移至 subprojects/mysub,並且在該目錄中執行 meson dist 現在會建立一個只包含該子目錄中的原始碼,而不包含主要專案或任何其他子專案的壓縮檔。

例如

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 壓縮檔。

鞏固從 VCS 取得的版本

自 1.4.0 版起meson dist 命令可以重新編寫發行壓縮檔的建置組態。當組態取決於版本控制中的元數據時(如下列範例所示),這是有必要的。

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

搜尋結果如下