CMake 3.29 發行說明

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

新功能

命令列

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

產生器

基於檔案的 API

編譯器

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

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

  • 現在支援基於 TI Clang 的編譯器,其 compiler idTIClang

命令

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

  • 新增了 cmake_language(EXIT) 子命令,以指定結束代碼終止 cmake -P 指令碼。

  • 新增了 export(SETUP) 子命令來設定匯出集合。它的 TARGET 選項的 XCFRAMEWORK_LOCATION 設定指定 .xcframework 的位置,該 .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 為目標時的現有行為對稱,其中該命令在先考慮 .a 之後,接受 .lib 檔案名稱。

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

  • 現在,NinjaNMake Makefiles 產生器在從版本 2021.4 開始使用 IntelLLVM 時,會使用 -external:I 旗標來進行系統包含。從版本 2022.2 開始,也會使用 -external:W0 旗標。

  • 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

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