CMake 3.31 發行說明¶
自 CMake 3.30 以來所做的變更包括以下內容。
新功能¶
預設集¶
cmake-presets(7)
檔案現在可以在 JSON 物件內的任何層級使用鍵$comment
來包含註解,以提供文件。cmake-presets(7)
檔案現在可以在設定預設集中使用graphviz
鍵來請求 graphviz 輸出。
產生器¶
Ninja 產生器 和 Makefile 產生器 現在產生
codegen
建置目標。請參閱政策CMP0171
。它驅動建置圖的子集,足以執行使用add_custom_command()
的新CODEGEN
選項建立的自訂命令。
命令列¶
cmake --workflow
模式現在接受預設集名稱作為第一個引數,允許更簡單的命令列cmake --workflow <preset>
。新增了
cmake -LR[A][H]
選項,以列出名稱與正則表達式匹配的快取條目。
編譯器¶
LFortran 編譯器現在透過
compiler id
LFortran
支援。
命令¶
add_custom_command()
命令新增了CODEGEN
選項,以將自訂命令的輸出標記為codegen
目標的依賴項。請參閱政策CMP0171
。cmake_pkg_config()
命令已新增為使用 CMake 原生 pkg-config 格式解析器的端點。此版本中唯一支援的選項是EXTRACT
,它提供對解析 pkg-config 檔案產生的值的低階存取。對於大多數使用者而言,這還不是FindPkgConfig
模組的合適替代品。file(ARCHIVE_CREATE)
命令新增了WORKING_DIRECTORY
選項,以指定歸檔程序的工作目錄。file(MAKE_DIRECTORY)
命令新增了RESULT
選項,以在結果變數中捕獲失敗。install(FILES)
和install(DIRECTORY)
命令的TYPE
引數新增了對LIBEXEC
類型的支援。
變數¶
新增了
CMAKE_AIX_SHARED_LIBRARY_ARCHIVE
變數和對應的AIX_SHARED_LIBRARY_ARCHIVE
目標屬性,以在 AIX 上將共享函式庫建立為共享函式庫封存檔。新增了
CMAKE_EXPORT_BUILD_DATABASE
變數、對應的CMAKE_EXPORT_BUILD_DATABASE
環境變數和EXPORT_BUILD_DATABASE
目標屬性,以啟用匯出 C++ 模組編譯命令。這僅在使用 Ninja 產生器 時受支援。新增了
CMAKE_HOST_EXECUTABLE_SUFFIX
變數,以提供主機平台上可執行檔名稱的後綴。新增了
CMAKE_<LANG>_HOST_COMPILER_ID
和CMAKE_<LANG>_HOST_COMPILER_VERSION
變數,其中<LANG>
是CUDA
或HIP
。當CMAKE_<LANG>_COMPILER_ID
為NVIDIA
時,它們會被填入以識別 NVCC 的主機編譯器。新增了
CMAKE_<LANG>_STANDARD_LINK_DIRECTORIES
變數。工具鏈檔案可以設定此變數,以控制哪些連結函式庫目錄路徑始終傳遞給指定語言的編譯器。新增了
CMAKE_LINK_LIBRARIES_STRATEGY
變數和對應的LINK_LIBRARIES_STRATEGY
目標屬性,以選擇性地指定 CMake 用於產生連結行的策略。新增了
CMAKE_CONFIG_DIR
環境變數,以指定cmake-file-api(7)
查詢的 CMake 使用者範圍配置目錄。
屬性¶
新增了
MACOSX_FRAMEWORK_BUNDLE_NAME
目標屬性,以在 AppleFRAMEWORK
的Info.plist
檔案中設定CFBundleName
鍵。UNITY_BUILD
目標屬性現在支援CUDA
語言。新增了
VS_FRAMEWORK_REFERENCES
目標屬性,以告知 Visual Studio 產生器 新增框架參考。
模組¶
檢查模組現在支援
CMAKE_REQUIRED_LINK_DIRECTORIES
變數。以下模組新增了此支援CMakePackageConfigHelpers
模組的generate_apple_platform_selection_file()
函數新增了對 iOS Mac Catalyst 的支援。GoogleTest
模組gtest_discover_tests()
命令新增了DISCOVERY_EXTRA_ARGS
關鍵字。它允許在查詢測試列表時,將額外的引數附加到命令列。FindCUDAToolkit
模組現在提供CUDA::nvml_static
目標。FindOpenMP
模組新增了對CUDA
語言的支援。
CTest¶
ctest_submit()
命令和ctest -T Submit
步驟現在預設會驗證連線到https://
URL 的 TLS 伺服器憑證。有關詳細資訊,請參閱CTEST_TLS_VERIFY
變數。ctest_submit()
命令和ctest -T Submit
步驟現在預設需要 TLS 1.2 或更高版本才能連線到https://
URL。有關詳細資訊,請參閱CTEST_TLS_VERSION
變數。
CPack¶
CPack DEB 產生器
新增了CPACK_DEBIAN_PACKAGE_MULTIARCH
選項,以支援多架構套件。CPack IFW 產生器
新增了CPACK_IFW_PACKAGE_PRODUCT_IMAGE_URLS
變數,以指定與CPACK_IFW_PACKAGE_PRODUCT_IMAGES
條目關聯的圖像。此功能適用於 QtIFW 4.0 及更新版本。CPack RPM 產生器
新增了對zstd
作為CPACK_RPM_COMPRESSION_TYPE
值的支援。CPack
模組預設在CPack WIX 產生器
中啟用每機器安裝。請參閱政策CMP0172
和CPACK_WIX_INSTALL_SCOPE
變數。
已棄用和移除的功能¶
與舊於 3.10 的 CMake 版本的相容性現在已棄用,並將在未來的版本中移除。現在,呼叫
cmake_minimum_required()
或cmake_policy()
將政策版本設定為舊值的操作,現在會發出棄用診斷訊息。CMakeFindFrameworks
模組已透過CMP0173
棄用。專案應改用find_library()
。已移除
Visual Studio 12 2013
產生器。
其他變更¶
當連結行上的靜態函式庫被去重複時 (依據政策
CMP0156
),現在所有平台上都會保留第一次出現的項目。請參閱政策CMP0179
。在
TEST_LAUNCHER
和CROSSCOMPILING_EMULATOR
目標屬性中的空列表元素現在會被保留,藉由add_test()
命令。來自
ExternalData
模組的ExternalData_Add_Test()
命令。來自
GoogleTest
模組的gtest_add_tests()
和gtest_discover_tests()
命令。在這些命令的EXTRA_ARGS
關鍵字後的空列表元素現在也會被保留。
請參閱政策
CMP0178
。execute_process()
命令的ENCODING
選項,在 Windows 上有意義,現在預設為UTF-8
。請參閱政策CMP0176
。file(DOWNLOAD)
和file(UPLOAD)
命令現在預設會驗證與https://
URL 連接的 TLS 伺服器憑證。詳情請參閱CMAKE_TLS_VERIFY
變數。此變更在沒有政策的情況下進行,以便即使在構建未更新的專案時,使用者也能受到保護。使用者可以將CMAKE_TLS_VERIFY
環境變數設定為0
以恢復舊的預設行為。file(DOWNLOAD)
和file(UPLOAD)
命令現在預設需要 TLS 1.2 或更高版本才能連接到https://
URL。詳情請參閱CMAKE_TLS_VERSION
變數。file(GET_RUNTIME_DEPENDENCIES)
命令已更新,以更緊密地匹配 Linux 上動態載入器的行為。install()
命令的DESTINATION
參數現在已 正規化,但install(TARGETS)
中的INCLUDES DESTINATION
參數除外。請參閱政策CMP0177
。project()
命令現在始終將<PROJECT-NAME>_SOURCE_DIR
、<PROJECT-NAME>_BINARY_DIR
和<PROJECT-NAME>_IS_TOP_LEVEL
設定為一般變數和快取條目。請參閱政策CMP0180
。cmake_parse_arguments(PARSE_ARGV)
命令現在為單值關鍵字後的空字串定義一個變數。請參閱政策CMP0174
。
更新¶
自 CMake 3.31.0 以來所做的變更包括以下內容。
3.31.1、3.31.2、3.31.3、3.31.4、3.31.5、3.31.6¶
這些版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新,以支援生態系統變更和/或修復回歸。