CMake 3.25 版本發行說明

自 CMake 3.24 以來所做的變更包括以下內容。

新功能

預設集

語言

命令列

編譯器

命令

  • 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_VARIABLERUN_OUTPUT_STDERR_VARIABLE 選項,以從編譯程式的輸出中分別擷取 stdout 和 stderr。

變數

屬性

  • <LANG>_COMPILER_LAUNCHER 目標屬性現在支援 產生器運算式

  • 新增了 EXPORT_NO_SYSTEM 目標屬性,以指定 install(EXPORT)export() 命令將產生具有 SYSTEM 屬性 OFF 的匯入目標。

  • 新增了 SYSTEM 目標屬性,以指定是否應將目標視為系統程式庫(即,其包含目錄在編譯消費者時會自動成為 SYSTEM)。如果未設定,預設值為先前的行為:匯入目標為 on,其他目標為 off。

  • 新增了 SYSTEM 目錄屬性,以初始化在該目錄中建立的目標的 SYSTEM 目標屬性。

模組

  • FetchContent 模組的 FetchContent_Declare() 命令新增了 SYSTEM 選項,該選項在 SYSTEMFetchContent_MakeAvailable() 建立的子目錄上設定目錄屬性。

  • FindCUDAToolkit 模組現在為 CUDA 10.0+ 提供了 nvtx3 的目標,它取代了 nvToolsExt。當專案需要 CMake 3.25 且使用 CUDA 10.0+ 時,使用 nvToolsExt 時會發出棄用警告。

  • FindDoxygen 模組的版本處理已得到改進

    • 如果需要滿足版本約束,現在將考慮多個候選安裝。先前,只會考慮遇到的第一個。

    • 支援版本範圍。

    • 現在可以容忍 Doxygen 報告的版本格式的變體(例如,尾隨 git commit 雜湊)。

  • FindOpenAL 模組現在提供匯入的目標。

  • 新增了 FindOpenSP 模組,以尋找 OpenSP 程式庫。

  • FindVulkan 模組增加了對新組件的支援

    dxc

    DirectX Shader Compiler。

    volk

    Volk 開源 vulkan meta-loader。

CPack

已棄用和移除的功能

其他變更

  • 現在可以使用 SSL_CERT_FILESSL_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

  • 此版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新,以支援生態系統變更和/或修復回歸。