執行 Meson

有兩種不同的方式可以呼叫 Meson。第一種,您可以直接從原始碼樹執行它,使用命令 /path/to/source/meson.py。第二種,Meson 也可能被安裝,在這種情況下,命令就只是 meson。為了簡潔起見,在本手冊中,我們只使用後者格式。

在撰寫本文時,只有 Meson 的命令列版本可用。這表示必須使用終端機來呼叫 Meson。如果您希望使用 MSVC 編譯器,您需要在「Visual Studio 命令提示字元」下執行 Meson。

所有可用的 Meson 命令都列在命令參考頁面上。

設定建置目錄

假設我們有一個原始碼樹,其中包含 Meson 建置系統。這表示最上層目錄中有一個名為 meson.build 的檔案。我們執行以下命令來啟動建置。

cd /path/to/source/root
meson setup builddir

我們使用 setup 命令呼叫 Meson,並給它建置目錄的位置。Meson 使用源碼樹外建置

提示:Meson 的語法是 meson [命令] [參數] [選項]setup 命令接受 builddirsrcdir 參數。如果沒有給定 srcdir,Meson 會根據 pwdmeson.build 的位置推斷出 srcdir

然後,Meson 會載入建置組態檔案,並在建置目錄中寫入對應的建置後端。預設情況下,Meson 會產生除錯建置,這會啟用基本警告和除錯資訊,並停用編譯器最佳化。

此外,調用可以將選項傳遞給 Meson。選項清單記錄在這裡

您可以使用 --buildtype 命令列參數指定不同的建置類型。它可以具有以下值之一。

含義
plain 不使用任何額外的建置標誌,即使是編譯器警告也一樣,適用於發行版打包者和其他需要自行指定所有參數的情況
debug 產生除錯資訊,但不優化結果,這是預設值
debugoptimized 產生除錯資訊,並優化程式碼(在大多數編譯器上,這表示 -g -O2
release 完全最佳化,沒有除錯資訊

建置目錄是必要的。這樣做的原因是,它極大地簡化了建置過程。在任何情況下,Meson 都不會將檔案寫入原始碼目錄中(如果它這樣做,那就是一個錯誤,應該被修復)。這表示使用者不需要將一堆檔案新增到他們的版本控制的忽略清單中。這也表示您可以為任何給定的原始碼樹建立任意多個建置目錄。

例如,如果我們想測試使用 Clang 編譯器而不是系統預設值來建置原始碼,我們可以輸入以下命令

cd /path/to/source/root
CC=clang CXX=clang++ meson setup buildclang

如果您的程式碼有多個組態選項(例如多個資料後端),這種分離會更加強大。您可以為它們的每一個建立單獨的子目錄。您也可以擁有用於最佳化建置、程式碼覆蓋率、靜態分析等等的建置目錄。它們都被整齊地分隔開來,並且使用相同的原始碼樹。在不同的組態之間切換只是切換到對應目錄的問題。

除非另有說明,否則以下所有命令列調用都應在原始碼目錄中執行。

預設情況下,Meson 將使用 Ninja 後端來建置您的專案。如果您希望使用任何其他後端,您需要在設定時傳遞對應的參數。舉例來說,這是您如何使用 Meson 來產生 Visual Studio 解決方案的方法。

meson setup <build dir> --backend=vs

然後,您可以使用 Visual Studio 開啟產生的解決方案,並以通常的方式進行編譯。可以使用 meson setup --help 取得後端清單。

環境變數

有時您想要新增額外的編譯器標誌,這可以透過在呼叫 Meson 時在環境變數中傳遞它們來完成。有關所有環境變數的清單,請參閱參考表。但是請注意,這些環境變數僅用於原生編譯器,不會影響用於交叉編譯的編譯器,在交叉編譯中,將使用交叉檔案中指定的標誌。

此外,可以透過使用 --buildtype=plain 選項來阻止 Meson 自己新增標誌,在這種情況下,您必須提供所需的完整編譯器和連結器參數。

從原始碼建置

若要開始建置,只需輸入以下命令。

meson compile -C builddir

有關更多資訊,請參閱 meson compile 說明

直接使用 Ninja 建置

預設情況下,Meson 使用Ninja 建置系統來實際建置程式碼。若要開始建置,只需輸入以下命令。

ninja -C builddir

Ninja 和 Make 之間的主要可用性差異在於,Ninja 會自動偵測您電腦中的 CPU 數量,並相應地進行平行化。您可以使用命令列參數 -j <程序數量> 覆蓋所使用的平行處理程序數量。

應該注意的是,在初始設定步驟之後,ninja 是您需要鍵入以進行編譯的唯一命令。無論您如何修改原始碼樹(除非將其移動到一個全新的位置),Meson 都會偵測到變更並相應地重新產生自身。如果您有多個建置目錄,這特別方便。其中一個通常用於開發(「除錯」建置),而其他目錄則偶爾使用(例如「靜態分析」建置)。只需 cd 到對應的目錄並執行 Ninja,即可建置任何組態。

執行測試

Meson 提供對執行測試的本機支援。執行該操作的命令很簡單。

meson test -C builddir

有關更多資訊,請參閱 meson test 說明

Meson 不會強制使用任何特定的測試框架。您可以自由使用 GTest、Boost Test、Check 或甚至是自訂的可執行檔。

注意:也可以使用以下命令直接使用 ninja 呼叫

ninja -C builddir test

安裝

安裝已建置的軟體同樣簡單。

meson install -C builddir

有關更多資訊,請參閱 meson install 說明

請注意,Meson 只會安裝明確標記為可安裝的建置目標,如安裝目標文件中所述。

預設情況下,Meson 會安裝到 /usr/local。這可以透過在設定時將命令列參數 --prefix /your/prefix 傳遞給 Meson 來變更。Meson 也支援用於例如建置套件的 DESTDIR 變數。它是這樣使用的

DESTDIR=/path/to/staging meson install -C builddir

注意:也可以使用以下命令直接使用 ninja 呼叫

ninja -C builddir install

命令列說明

Meson 具有標準的命令列說明功能。可以使用以下命令存取。

meson --help

退出狀態

如果成功,Meson 會以狀態 0 退出;如果命令列或 meson.build 檔案有問題,則以狀態 1 退出;如果發生內部錯誤,則以狀態 2 退出。

搜尋結果為