使用多個建置目錄
Meson 的主要設計目標之一是異地建置所有專案。這表示在建置過程中產生的所有檔案都會放置在一個獨立的子目錄中。這與 Unix 常見的就地建置專案的傳統相悖。異地建置有兩個主要優點。
首先,這使得 VCS「忽略」檔案非常簡單。在傳統的建置系統中,您可能需要數十行的定義,其中大部分包含萬用字元。當進行異地建置時,所有這些繁瑣的工作都消失了。Meson 專案的常見忽略檔案僅包含幾行,即建置目錄和 IDE 專案檔案。(請注意,自 Meson 0.57.0 起,透過在建置目錄內產生忽略檔案,git 和 mercurial 會自動忽略建置目錄。)
其次,這使得清除專案變得非常容易:只需刪除建置子目錄即可完成。無需猜測是否需要執行 make clean
、make distclean
、make mrproper
或其他命令。當您刪除建置子目錄時,舊建置不可能有任何殘留狀態。
不過,真正的好處來自其他地方。
同一來源樹的多個建置目錄
由於建置目錄是完全獨立的,並將來源樹視為唯讀資料,因此您可以同時為任何來源樹建立任意多個建置樹。由於所有建置樹可以具有不同的組態,因此這非常強大。現在您可能想知道為什麼有人會想同時擁有多個建置設定。讓我們透過設定一個假設的專案來檢視一下。
首先要做的是設定預設建置,也就是我們將在 90% 以上時間使用的建置。在其中,我們使用系統編譯器,並在啟用除錯功能且未進行最佳化的情況下進行建置,以便盡快建置。這是 Meson 的預設專案類型,因此設定它很簡單。
mkdir builddir
meson setup builddir
另一個常見的設定是使用除錯和最佳化功能進行建置,例如,執行效能測試。設定此項同樣簡單。
mkdir buildopt
meson --buildtype=debugoptimized buildopt
對於預設編譯器為 GCC 的系統,我們也希望使用 Clang 進行編譯。因此,讓我們這樣做。
mkdir buildclang
CC=clang CXX=clang++ meson setup buildclang
您也可以新增交叉建置。例如,讓我們使用 MinGW 設定 Linux -> Windows 交叉編譯建置。
mkdir buildwine
meson --cross-file=mingw-cross.txt buildwine
交叉編譯檔案會設定 Wine,以便您不僅可以編譯您的應用程式,還可以透過發出命令 meson test
來執行單元測試套件。
若要編譯任何這些建置類型,只需 cd 到相應的建置目錄並執行 meson compile
,或指示您的 IDE 執行相同的操作。請注意,一旦您設定好建置目錄,就可以直接執行 Ninja,Meson 將確保產生的建置根據來源完全是最新的。即使您數週沒有觸及其中一個目錄,並且對您的建置組態進行了重大變更,Meson 也會偵測到這一點,並將建置目錄更新(或在無法更新時列印錯誤)。這允許您在預設目錄中完成大部分工作,並偶爾使用其他目錄,而無需監管您的建置目錄。
專業用途
獨立的建置目錄可以輕鬆整合各種不同的工具。例如,Clang 配有一個靜態分析器。它旨在從頭開始在給定的來源樹上執行。使用 Meson 執行它的步驟非常簡單。
rm -rf buildscan
mkdir buildscan
scan-build meson setup buildscan
cd buildscan
scan-build ninja
這些命令對於每個 Meson 專案都是相同的,因此它們甚至可以放入腳本中,將靜態分析變成單一命令。
搜尋結果為