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 選項,該選項會在 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

已棄用和移除的功能

其他變更

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

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