CMake 3.25 發行說明¶
自 CMake 3.24 以來的變更包括以下內容。
新功能¶
預設值¶
cmake-presets(7)
架構版本已提升至6
。cmake-presets(7)
格式現在支援packagePresets
欄位,以指定cpack --preset
的預設值。cmake-presets(7)
格式現在支援workflowPresets
欄位,以指定cmake --workflow
的預設值。cmake-presets(7)
格式現在支援outputJUnitFile
欄位,以在測試預設值中指定 JUnit 輸出。
語言¶
現在可以透過
CXX_STANDARD
、CUDA_STANDARD
、HIP_STANDARD
或OBJCXX_STANDARD
目標屬性來指定 C++26 編譯器模式。現在,使用
nvcc
時,CUDA
語言支援包含裝置連結時間最佳化。CMAKE_INTERPROCEDURAL_OPTIMIZATION
變數和相關的INTERPROCEDURAL_OPTIMIZATION
目標屬性將啟用裝置 LTO。
命令列¶
新增了
cmake --workflow --preset
模式,可透過單一命令驅動配置、建置、測試和封裝作業的序列。cmake -E capabilities
命令新增了一個tls
欄位,用於告知是否啟用 TLS。cmake -E env
命令列工具新增了--modify
旗標,以支援ENVIRONMENT_MODIFICATION
作業。cmake --debug-trycompile
選項現在會列印記錄訊息,報告每個嘗試編譯檢查所在的目錄。
編譯器¶
新增了對 Tasking 編譯器工具集 (SmartCode、TriCore、獨立版:ARM、MCS、8051) 的支援,編譯器 ID 為
Tasking
。請參閱CMAKE_TASKING_TOOLSET
變數。
命令¶
add_subdirectory()
命令新增了SYSTEM
選項,以在子目錄中啟用SYSTEM
目錄屬性。新增了
block()
和endblock()
命令,以管理所含命令區塊的特定範圍(原則或變數)。cmake_language()
命令新增了一個GET_MESSAGE_LOG_LEVEL
子命令。它可以用於查詢目前訊息記錄層級。find_file()
、find_path()
、find_library()
和find_program()
命令新增了一個VALIDATOR
選項,以指定要針對每個候選項目呼叫的函式以進行驗證。當搜尋套件組態檔時,
find_package()
命令現在會考慮<prefix>/<name>*/(cmake|CMake)/<name>*/
形式的路徑。return()
命令新增了一個PROPAGATE
選項,以將變數傳播到控制項返回的範圍。請參閱原則CMP0140
。try_compile()
和try_run()
命令新增了新的簽章,這些簽章更一致地使用關鍵字分派,且不需要指定二進位目錄。此外,這些簽章會針對每個調用使用唯一的目錄,這允許在使用cmake --debug-trycompile
時保留多個輸出。try_compile()
和try_run()
命令新增了NO_CACHE
選項,以將結果儲存在一般變數中。try_run()
命令新增了RUN_OUTPUT_STDOUT_VARIABLE
和RUN_OUTPUT_STDERR_VARIABLE
選項,以從編譯程式的輸出中個別擷取 stdout 和 stderr。
變數¶
當目標或主機系統分別為 BSD 時,
BSD
和CMAKE_HOST_BSD
變數現在會設定為字串值。當目標或主機系統分別為 Linux 時,
LINUX
和CMAKE_HOST_LINUX
變數現在會設定為 true。引入了
CMAKE_MSVC_DEBUG_INFORMATION_FORMAT
變數和MSVC_DEBUG_INFORMATION_FORMAT
目標屬性,以選擇針對 MSVC ABI 的編譯器的偵錯資訊格式。請參閱原則CMP0141
。新增了
CMAKE_XCODE_SCHEME_ENABLE_GPU_API_VALIDATION
變數和對應的XCODE_SCHEME_ENABLE_GPU_API_VALIDATION
目標屬性,以告知Xcode
產生器在 scheme 的Metal: API Validation
設定中要放入什麼。新增了
CMAKE_XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION
變數和對應的XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION
目標屬性,以告知Xcode
產生器在 scheme 的Metal: Shader Validation
設定中要放入什麼。新增了
CMAKE_XCODE_SCHEME_LAUNCH_MODE
變數和對應的XCODE_SCHEME_LAUNCH_MODE
目標屬性,以告知Xcode
產生器在 scheme 的「啟動」模式設定中要放入什麼。新增了
CMAKE_XCODE_SCHEME_LAUNCH_CONFIGURATION
變數和對應的XCODE_SCHEME_LAUNCH_CONFIGURATION
目標屬性,以告知Xcode
產生器在 scheme 的 Launch 動作中要放入哪個組態。
屬性¶
<LANG>_COMPILER_LAUNCHER
目標屬性現在支援產生器運算式
。新增了
EXPORT_NO_SYSTEM
目標屬性,以指定install(EXPORT)
和export()
命令將會產生一個SYSTEM
屬性為OFF
的匯入目標。新增了
SYSTEM
目標屬性,以指定是否應將目標視為系統函式庫(也就是說,當編譯消費者時,其包含目錄會自動為SYSTEM
)。如果未設定,則預設為先前的行為:對於匯入的目標為 on,對於其他目標為 off。
模組¶
FetchContent
模組的FetchContent_Declare()
命令取得了一個SYSTEM
選項,該選項會在FetchContent_MakeAvailable()
建立的子目錄上設定SYSTEM
目錄屬性。FindCUDAToolkit
模組現在為 CUDA 10.0+ 提供 nvtx3 的目標,這取代了 nvToolsExt。當專案需要 CMake 3.25 且使用 CUDA 10.0+ 時,使用nvToolsExt
會發出棄用警告。已改進
FindDoxygen
模組的版本處理。現在,如果需要,會考慮多個候選安裝,以滿足版本限制。先前,只會考慮遇到的第一個安裝。
支援版本範圍。
現在可以容忍 Doxygen 回報的版本格式的變化(例如,尾隨的 git 提交雜湊)。
FindOpenAL
模組現在提供匯入的目標。新增
FindOpenSP
模組,用於尋找 OpenSP 函式庫。FindVulkan
模組新增了對以下元件的支援:dxc
DirectX Shader 編譯器。
volk
Volk 開源 Vulkan 元載入器。
CPack¶
CPack Archive 產生器
新增了CPACK_ARCHIVE_FILE_EXTENSION
變數,用於控制套件檔案的副檔名。CPack NSIS 產生器
新增了兩個變數CPACK_NSIS_EXECUTABLE_PRE_ARGUMENTS
和CPACK_NSIS_EXECUTABLE_POST_ARGUMENTS
,用於提供給 NSIS 可執行檔調用的引數。CPack
模組新增了CPACK_READELF_EXECUTABLE
、CPACK_OBJCOPY_EXECUTABLE
和CPACK_OBJDUMP_EXECUTABLE
變數,用於控制cpack(1)
使用的 binutils 位置。
已棄用和移除的功能¶
已棄用
IMPORTED_NO_SYSTEM
目標屬性,並建議改用SYSTEM
和EXPORT_NO_SYSTEM
。已移除
Visual Studio 10 2010
產生器。現在已棄用
Visual Studio 11 2012
產生器,並將在未來版本的 CMake 中移除。
其他變更¶
現在可以使用
SSL_CERT_FILE
和SSL_CERT_DIR
環境變數,來覆寫 TLS/SSL 操作中尋找憑證授權單位的位置。如果
<LANG>_CLANG_TIDY
包含-p
引數,則不再將完整的編譯器命令列附加到--
之後。Xcode
產生器不再將每個設定的後綴$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
新增到函式庫搜尋路徑。請參閱原則CMP0142
。
更新¶
自 CMake 3.25.0 以來的變更包括以下內容。
3.25.1¶
在 Windows 上,以 MSVC ABI 為目標時,
find_library()
命令不再接受.a
檔案名稱。此行為已在 CMake 3.25.0 中新增,但由於在我們先前未找到的情況下找到了 GNU-ABI 函式庫,因此已還原。
3.25.2¶
現在 NVCC 12.0 及更高版本支援 CUDA 語言等級 20(對應於 C++20)。
在 Windows 上,Intel oneAPI 2023.0 及更高版本現在提供的
icpx
編譯器不再被選取,因為 CMake 尚未支援其類似 GNU 的命令列。
3.25.3¶
此版本未對記錄的功能或介面進行任何變更。進行了一些實作更新,以支援生態系統變更和/或修正回歸。