CMake 3.29 發行說明

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

新功能

命令列

  • cmake(1) -E cat 現在可以透過傳遞 - 參數來列印標準輸入。

產生器

基於檔案的 API

編譯器

  • Windows 上的 LLVM/Clang 類 GNU 前端 (clang++) 現在可用於編譯 CUDA 語言來源。

  • Windows (MinGW) 上以 GNU ABI 為目標的編譯器現在可用於編譯 Objective C (OBJC) 和 Objective C++ (OBJCXX)。 這些包括 GNU 編譯器 (gccg++) 以及 LLVM/Clang 類 GNU 前端 (clangclang++)。

  • 現在透過 compiler id TIClang 支援基於 TI Clang 的編譯器。

命令

  • add_custom_command(TARGET) 簽章現在支援透過 別名目標 新增建置事件。

  • cmake_language(EXIT) 子命令已新增,用於終止具有指定結束代碼的 cmake -P 指令碼。

  • export(SETUP) 子命令已新增,用於配置匯出集。 其 TARGET 選項的 XCFRAMEWORK_LOCATION 設定指定了 .xcframework 的位置,該位置可以替代已安裝的目標。

  • if() 命令新增了 IS_READABLEIS_WRITABLEIS_EXECUTABLE 測試,以檢查檔案或目錄權限。

  • try_compile()try_run() 命令新增了 LINKER_LANGUAGE 選項,以在產生的測試專案中指定 LINKER_LANGUAGE 目標屬性。

變數

屬性

模組

CTest

  • ctest(1) 新增了 --http-header 選項,用於在提交至 CDash 時新增自訂標頭。

  • ctest(1) 新增了 --tests-from-file--exclude-from-file 選項,用於執行或排除檔案中命名的測試。

  • ctest(1) 現在支援 POSIX 系統上的 任務伺服器整合

  • ctest -j 選項現在可以在不帶值的情況下給出,以讓 ctest 選擇預設的並行等級,或使用 0 讓 ctest 使用無限制的並行性。 對應的 CTEST_PARALLEL_LEVEL 環境變數,如果設定為空字串,則現在等同於傳遞不帶值的 -j

  • ctest_test() 命令新增了 INCLUDE_FROM_FILEEXCLUDE_FROM_FILE 選項,用於執行或排除檔案中命名的測試。

CPack

其他變更

  • CMake 學習根據連結器的功能來消除連結行上的重複程式庫。 請參閱策略 CMP0156

  • add_test() 命令現在僅在交叉編譯時才遵循 CMAKE_CROSSCOMPILING_EMULATOR。 請參閱策略 CMP0158

  • 在 Windows 上,當以 MSVC ABI 為目標時,find_library() 命令現在在首先考慮 .lib 之後,接受 .a 檔案名稱。 這與以 GNU ABI 為目標時的現有行為對稱,在 GNU ABI 中,該命令在首先考慮 .a 之後接受 .lib 檔案名稱。

  • 在 Windows 上,當以 MSVC ABI 為目標時,find_library() 命令現在在 .lib 之前考慮 .dll.lib 檔案名稱。 這是 Rust 工具鏈為 MSVC ABI 建立的 DLL 匯入程式庫的預設後綴。

  • NinjaNMake Makefiles 產生器現在將 -external:I 標誌用於系統 include,當使用 IntelLLVM 2021.4 或更高版本時。 -external:W0 標誌也用於 2022.2 或更高版本。

  • create_test_sourcelist() 命令現在提供了產生的驅動程式原始碼檔案的完整路徑。

  • CPACK_PRODUCTBUILD_DOMAINS 變數現在預設為 true。 請參閱策略 CMP0161

更新

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

3.29.1

3.29.2、3.29.3、3.29.4

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

3.29.5

  • CPack WIX 產生器CPACK_WIX_INSTALL_SCOPE 變數(在 3.29 中新增)現在預設為 NONE。 這恢復了與 3.28 及更低版本的行為的相容性:在沒有自訂 WiX 範本的情況下,它產生的安裝程式僅為當前使用者建立開始選單和解除安裝項目,即使它們是為所有使用者安裝的。

    在 3.29.0 到 3.29.4 中,CPACK_WIX_INSTALL_SCOPE 預設為 perMachine。 這建立了 MSI 安裝程式,預設情況下為所有使用者建立開始選單和解除安裝項目。 雖然此行為本身更好,但這些安裝程式無法乾淨地取代使用 3.28 及更低版本產生的 MSI 安裝程式建立的現有安裝。 3.29.5 為了相容性恢復了預設值。 專案可以透過設定 CPACK_WIX_INSTALL_SCOPE,按照自己的排程轉換為 perMachine

3.29.6、3.29.7、3.29.8、3.29.9

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