編譯器選擇與自訂建置#
選擇特定的編譯器#
Meson 支援標準環境變數 CC
、CXX
和 FC
,以選擇特定的 C、C++ 和/或 Fortran 編譯器。這些環境變數記錄在 Meson 文件中的參考表格中。
請注意,環境變數僅在全新建置時套用,因為它們會影響配置階段(即 meson setup
)。增量重建不會對環境變數的變更做出反應 - 您必須執行 git clean -xdf
並執行完整重建,或執行 meson setup --reconfigure
。
新增自訂編譯器或連結器旗標#
Meson 在設計上偏好透過傳遞給 meson setup
的命令列選項來配置建置。它提供了許多內建選項
如需啟用除錯建置和最佳化層級,請參閱下一節關於「建置類型」的內容,
以可移植的方式啟用
-Werror
是透過-Dwerror=true
完成的,啟用警告層級是透過
-Dwarning_level=<val>
完成的,其中<val>
是{0, 1, 2, 3, everything}
之一,還有許多其他內建選項,從啟用 Visual Studio (
-Dvsenv=true
) 和使用連結時間最佳化 (-Db_lto
) 建置,到變更預設 C++ 語言層級 (-Dcpp_std='c++17'
) 或連結器旗標 (-Dcpp_link_args='-Wl,-z,defs'
)。
如需選項的完整概述,請參閱 Meson 的內建選項文件頁面。
Meson 也支援標準環境變數 CFLAGS
、CXXFLAGS
、FFLAGS
和 LDFLAGS
來注入額外旗標 - 與前一節中關於這些環境變數僅在全新建置而非增量建置中被選取的注意事項相同。
使用 Meson 的不同建置類型#
Meson 在配置專案時提供不同的建置類型。您可以在 Meson 文件中的「核心選項」章節中查看建置類型的可用選項。
假設您是從頭開始建置(如果需要,請執行 git clean -xdf
),您可以如下配置建置以使用 debug
建置類型
meson setup build --buildtype debug --prefix=$PWD/build-install
現在,您可以使用 dev.py
介面來進一步建置、安裝和測試 SciPy
python dev.py -s linalg
這會有效,因為在初始配置之後,Meson 會記住配置選項。
控制建置並行性#
預設情況下,ninja
將啟動 2*n_cpu + 2
個平行建置作業,其中 n_cpu
是實體 CPU 核心的數量。這在絕大多數情況下都很好,並產生接近最佳的建置時間。在某些情況下,在 RAM 相對 CPU 核心數量較小的機器上,這會導致作業記憶體不足。如果發生這種情況,請降低作業數量 N
,以便每個作業至少有 2 GB RAM。例如,要啟動 6 個作業
python -m pip install . -Ccompile-args="-j6"
或
python dev.py build -j6
並行使用 GCC 和 Clang 建置#
在同一個儲存庫中擁有 SciPy 的多個建置可能很有用,例如比較兩個編譯器之間的差異以診斷問題。如前所述,Meson 是完全異地建置的,因此不同的建置不會互相干擾。在本節的其餘部分,我們假設 GCC 是預設值。例如,讓我們使用 GCC 和 Clang 進行建置。
使用 GCC 建置
python dev.py build
使用上述命令,meson 將在 build
目錄中使用 (預設) GCC 編譯器進行建置,並安裝到 build-install
目錄。
使用 Clang 建置
CC=clang CXX=clang++ FC=gfortran python dev.py --build-dir=build-clang build
使用上述命令,Meson 將在 build-clang
目錄中使用 Clang、Clang++ 和 Gfortran 編譯器進行建置,然後將 SciPy 安裝到 build-clang-install
。
Meson 會記住 build-clang
目錄的編譯器選擇,且無法變更,因此未來每次調用 python dev.py --build-dir=build-clang <command>
時,它都會自動使用 Clang。
提示:使用別名使其更易於使用,例如,alias dev-clang="python dev.py --build-dir=build-clang"
,然後 dev-clang build
。
擁有兩個建置的常見原因是為了比較它們之間的差異。例如,要針對使用兩個編譯器的建置執行 scipy.linalg
測試,請執行
python dev.py -s linalg # run tests for the GCC build
python dev.py --build-dir build-clang -s linalg # run tests for the Clang build