CMake 3.22 版本發行說明¶
自 CMake 3.21 以來所做的變更包括以下內容。
新功能¶
命令¶
現在,
cmake_host_system_information()
命令可以從/etc/os-release
檔案查詢 OS 識別變數。現在,
string(TIMESTAMP)
命令支援用於 ISO 8601 週數的%V
指定符。
變數¶
新增了
CMAKE_BUILD_TYPE
環境變數,以提供CMAKE_BUILD_TYPE
變數的預設值。新增了
CMAKE_CONFIGURATION_TYPES
環境變數,以提供CMAKE_CONFIGURATION_TYPES
變數的預設值。新增了
CMAKE_INSTALL_MODE
環境變數,以告知install()
規則(由file(INSTALL)
實作)安裝符號連結,而不是複製檔案。新增了
CMAKE_<LANG>_LINK_WHAT_YOU_USE_FLAG
和CMAKE_LINK_WHAT_YOU_USE_CHECK
變數,以控制LINK_WHAT_YOU_USE
目標屬性所使用的連結器旗標和檢查。新增了
CMAKE_REQUIRE_FIND_PACKAGE_<PackageName>
變數,以將非 REQUIRED 的find_package()
呼叫轉換為 REQUIRED 的呼叫。
屬性¶
現在,
<LANG>_EXTENSIONS
目標屬性會初始化為從編譯器偵測到的CMAKE_<LANG>_EXTENSIONS_DEFAULT
。請參閱CMP0128
。現在,所有來源檔案類型都支援
VS_SETTINGS
來源檔案屬性。先前,它僅適用於非建置來源。
模組¶
現在,
CMakeDependentOption
模組cmake_dependent_option()
巨集支援完整的 條件語法。請參閱政策CMP0127
。現在,
FetchContent
模組會將CMAKE_TLS_VERIFY
、CMAKE_TLS_CAINFO
、CMAKE_NETRC
和CMAKE_NETRC_FILE
變數(如果已定義)傳遞到基礎的ExternalProject
子建置。先前,這些變數會被FetchContent
靜默忽略。FindBLAS
和FindLAPACK
模組新增了BLA_SIZEOF_INTEGER
選項,以尋找 ABI 使用特定整數大小的 BLAS/LAPACK。現在,
FindJasper
模組提供匯入的目標。現在,
FindMatlab
模組提供匯入的目標。FindPkgConfig
模組新增了PKG_CONFIG_ARGN
變數,以指定pkg-config
呼叫的引數。GoogleTest
模組gtest_discover_tests()
函數新增了TEST_FILTER
選項,以在測試探索期間使用--gtest_filter
過濾測試。對於 Visual Studio 產生器,
UseSWIG
模組現在可以使用swig
工具來產生隱含的依賴關係。
CTest¶
ctest(1)
學會辨識在執行時期附加到測試的標籤。先前,只能在設定時使用LABELS
測試屬性將標籤附加到測試。有關更多資訊,請參閱其他測試量測。ctest(1)
學會能夠通過ENVIRONMENT_MODIFICATION
屬性修改測試的環境。這允許根據測試時存在的環境更新環境變數。現在,
ctest_memcheck()
命令還會產生一個DynamicAnalysis-Test.xml
檔案,該檔案可用於將測試結果提交到 CDash。
CPack¶
CPack DEB 產生器
新增了將CPACK_DEBIAN_COMPRESSION_TYPE
設定為zstd
的選項,這為 deb 套件啟用了 Zstandard 壓縮。CPack NSIS 產生器
新增了一個CPACK_NSIS_IGNORE_LICENSE_PAGE
變數,以在安裝程式中抑制授權頁面。CPack RPM 產生器
新增了CPACK_RPM_REQUIRES_EXCLUDE_FROM
選項,以避免掃描特定路徑以查找依賴關係。
已棄用和移除的功能¶
現在,
Visual Studio 10 2010
產生器已被棄用,並將在 CMake 的未來版本中移除。
其他變更¶
現在,當未指定標準層級時,
編譯功能
功能可以正確地停用或啟用編譯器擴充功能,並且如果請求的設定與編譯器的預設值相符,則避免不必要地新增語言標準旗標。請參閱CMP0128
。現在,
編譯功能
功能會忽略未啟用的語言的功能。現在,
Ninja
和NMake Makefiles
產生器對系統包含使用 MSVC-external:I
旗標。自 VS 16.10(工具鏈版本 14.29.30037)起,此功能已可用。現在,
CPack NSIS 產生器
需要 NSIS 3.03 或更高版本。
更新¶
自 CMake 3.22.0 以來所做的變更包括以下內容。
3.22.1¶
此版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新,以支援生態系統變更和/或修復回歸。
3.22.2¶
修復了
CMP0128
的OLD
行為,即使指定的標準與編譯器預設值相符,也會新增旗標。
3.22.3¶
如同 CMake 3.21 及更早版本一樣,
while()
命令再次忽略條件評估中的錯誤。此錯誤已在 3.22.0 中修復,但暴露出現有專案中的錯誤。修復程式已還原以恢復相容性。修復程式可能會在 CMake 的未來版本中通過政策恢復。
3.22.4, 3.22.5, 3.22.6¶
這些版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新,以支援生態系統變更和/或修復回歸。