CMake 3.22 發行說明¶
自 CMake 3.21 以來所做的變更包括以下內容。
新功能¶
指令¶
cmake_host_system_information()
指令現在可以從/etc/os-release
檔案查詢 作業系統識別變數。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¶
while()
命令再次忽略條件評估中的錯誤,就像 CMake 3.21 和更早版本一樣。此錯誤已在 3.22.0 中修復,但暴露了現有專案中的錯誤。該修復已還原以恢復相容性。該修復可能會在未來版本的 CMake 中透過政策恢復。
3.22.4、3.22.5、3.22.6¶
這些版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新,以支援生態系統變更和/或修復回歸問題。