使用 Meson
Meson 的設計目標是盡可能簡單易用。本頁概述安裝、疑難排解和標準使用所需的初始步驟。
如需更進階的設定,請參閱命令列說明 meson --help
或位於 Mesonbuild 網站上的 Meson 文件。
目錄
需求
只有在使用 Ninja 後端時才需要 Ninja。Meson 也可以產生原生的 VS 和 Xcode 專案檔。
使用套件管理員安裝
Ubuntu
$ sudo apt-get install python3 python3-pip python3-setuptools \
python3-wheel ninja-build
由於我們頻繁的發布週期和開發速度,發行版打包的軟體可能會很快過時。
使用 Python 安裝
需求:pip3
取得最新版本 Mesonbuild 的最佳方式。
以本機使用者身分安裝(建議)
$ pip3 install --user meson
以 root 身分安裝
# pip3 install meson
如果您不確定要以 root 身分還是本機使用者身分安裝,請以本機使用者身分安裝。
從原始碼安裝
需求:git
Meson 可以直接從複製的 git 儲存庫執行。
$ git clone https://github.com/mesonbuild/meson.git /path/to/sourcedir
疑難排解
常見問題
$ meson setup builddir
$ bash: /usr/bin/meson: No such file or directory
說明:python pip 模組安裝的預設安裝前綴可能未包含在您的 shell 環境 PATH
中。預設安裝位置因您的作業系統、發行版和 Python 版本而異。
解決方案:此問題可以透過變更預設 shell 環境 PATH
以包含 Pip 安裝二進位檔的路徑來解決。例如,這可能是 /usr/local/bin
或 /home/<username>/.local/bin
。
注意:還有其他方法可以解決此問題,例如使用符號連結或將二進位檔複製到預設路徑,但這些方法不建議或不支援,因為它們可能會破壞套件管理互通性。
編譯 Meson 專案
Meson 最常見的用例是在您正在處理的程式碼庫上編譯程式碼。要採取的步驟非常簡單。
$ cd /path/to/source/root
$ meson setup builddir && cd builddir
$ meson compile
$ meson test
唯一要注意的是,您需要建立一個單獨的建置目錄。Meson 不允許您在原始碼樹內建置原始碼。所有建置產物都儲存在建置目錄中。這允許您同時擁有具有不同設定的多個建置樹。這樣,產生的檔案就不會意外地新增到修訂控制中。
若要在程式碼變更後重新編譯,只需輸入 meson compile
。建置命令始終相同。您可以對原始碼和建置系統檔案進行任意變更,Meson 會偵測到這些變更並採取正確的動作。如果您想要建置最佳化二進位檔,只需在執行 Meson 時使用引數 --buildtype=debugoptimized
。建議您為未最佳化建置和最佳化建置保留一個建置目錄。要編譯任何給定的設定,只需進入相應的建置目錄並執行 meson compile
。
Meson 會自動新增編譯器旗標以啟用偵錯資訊和編譯器警告 (即 -g
和 -Wall
)。這表示使用者不必處理它們,而可以專注於程式設計。
將 Meson 用作發行版打包器
發行版打包器通常希望完全控制使用的建置旗標。Meson 原生支援此用例。建置和安裝 Meson 專案所需的命令如下。
$ cd /path/to/source/root
$ meson --prefix /usr --buildtype=plain builddir -Dc_args=... -Dcpp_args=... -Dc_link_args=... -Dcpp_link_args=...
$ meson compile -C builddir
$ meson test -C builddir
$ DESTDIR=/path/to/staging/root meson install -C builddir
命令列開關 --buildtype=plain
會告知 Meson 不要將其自己的旗標新增至命令列。這讓打包器可以完全控制使用的旗標。
這與其他建置系統非常相似。唯一的區別是 DESTDIR
變數是以環境變數的形式傳遞,而不是作為 meson install
的引數傳遞。
由於發行版建置始終是從頭開始進行,您可能會考慮在您的套件上啟用 unity 建置,因為它們速度更快,並且會產生更好的程式碼。但是,有許多專案在啟用 unity 建置的情況下無法建置,因此是否使用 unity 建置的決定必須由打包器逐個專案地做出。
搜尋結果是