CMake 3.21 發行說明

自 CMake 3.20 以來進行的變更包括以下內容。

新功能

預設集

產生器

語言

命令列

編譯器

  • 現在支援 Fujitsu 編譯器,在傳統 (Trad) 模式下使用編譯器 ID Fujitsu,在 Clang 模式下使用編譯器 ID FujitsuClang

平台

  • CMake 現在支援 MSYS 執行階段環境,非常類似 CYGWIN。

基於檔案的 API

  • cmake-file-api(7) "codemodel" 版本 2 version 欄位已更新至 2.3。

  • cmake-file-api(7) "codemodel" 版本 2 新增了一個包含目錄層級資訊的新 "directory" 物件。這包括由 install() 命令產生的安裝程式清單。

命令

變數

屬性

模組

  • FindBLASFindLAPACK 模組學會了支援串列 Fujitsu_SSL2 和並行 Fujitsu_SSL2BLAMP 程式庫。

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

  • FindIconv 模組現在具有版本支援。

  • FindIntl 模組現在具有版本支援。

  • FindMPI 模組學會了在主機和跨編譯模式下支援 FujitsuFujitsuClang

  • 新增了 FindMsys 模組,以尋找 MSYS 安裝。與 FindCygwin 類似,其他一些尋找模組會自動使用它來在 Windows 上定位 UNIX 風格的工具。

  • FindOpenMP 模組學會了支援 FujitsuFujitsuClang

  • FindVulkan 模組新增了匯入目標 Vulkan::HeadersVulkan::glslangValidator

  • UseJava 模組命令 add_jar 新增了 RESOURCES 選項,以允許使用非選用命名空間顯式命名資源。

  • UseSWIG 模組現在對 CSharp 語言使用標準程式庫命名慣例。請參閱原則 CMP0122

  • UseSWIG 模組現在支援使用 swig 工具,透過 Xcode 產生器產生隱含依賴項。

產生器表達式

CTest

CPack

已棄用和移除的功能

其他變更

  • find_file()find_path()find_program()find_library() 命令以相同的方式處理快取變數,無論它們是如何定義的。請參閱原則 CMP0125 以取得詳細資訊。

  • find_file()find_path()find_program()find_library() 命令新增了 NO_CACHE 選項,可將尋找結果儲存在一般變數中。

  • foreach() 命令現在會在迴圈範圍中隔離迴圈變數。詳情請參閱政策 CMP0124

  • list() 命令的 GETINSERTSUBLISTREMOVE_AT 子命令現在在根據政策 CMP0121 的設定,以無效(即非整數)值作為其任何索引引數時會產生錯誤。

  • set(CACHE) 命令不再移除同名的普通變數(如果有的話)。詳情請參閱政策 CMP0126

  • 透過 TARGET_OBJECTS 產生器表達式引用物件庫的 target_link_libraries() 呼叫,現在會將物件檔案放在連結行上所有程式庫之前,而無論其指定的順序為何。詳情請參閱 透過 $<TARGET_OBJECTS> 連結物件庫 的文件。

  • Ninja 產生器 現在使用絕對路徑將原始檔和包含目錄傳遞給編譯器。這使得診斷訊息和偵錯符號更加一致,並與 Makefile 產生器 相符。

  • NMake Makefiles 產生器現在在使用 VS 9 或更高版本的 nmake 時,將產生的 makefile 編碼為帶有 BOM 的 UTF-8。

  • 適用於 VS 2010 及更高版本的 Visual Studio 產生器 現在將每個來源的預處理器定義放在目標範圍的預處理器定義之後。這使得 VS 與 Ninja 產生器Makefile 產生器 一致。

  • cmake.org 上提供的預編譯二進制檔案現在支援 liblzma 多執行緒。請參閱 CPACK_THREADSCPACK_ARCHIVE_THREADS 變數。

更新

自 CMake 3.21.0 以來進行的變更包括以下內容。

3.21.1

  • Visual Studio 17 2022 產生器現在基於 "Visual Studio 2022 Preview 2"。之前它基於 "Preview 1.1"。

3.21.2

  • 啟用 CUDA_SEPARABLE_COMPILATIONCUDA 目標現在可以在非根目錄中正確產生。

  • Visual Studio 17 2022 產生器現在基於 "Visual Studio 2022 Preview 3.1"。之前它基於 "Preview 2"。

3.21.3

  • Visual Studio 17 2022 產生器現在基於 "Visual Studio 2022 Preview 4"。之前它基於 "Preview 3.1"。

  • AMD ROCm Platform hipcc 編譯器在 CMake 3.21.0 到 3.21.2 中被識別為具有 id ROCMClang 的不同編譯器。這已被移除,因為它導致了回歸。相反地

    • hipcc 可能不再用作 HIP 編譯器,因為它干擾了 CMake 需要傳遞給 Clang 的旗標。請直接使用 Clang。

    • hipcc 可以再次用作 CXX 編譯器,並且被視為它在底層選擇的任何編譯器,就像 CMake 3.20 及更早版本所做的那樣。

3.21.4

  • Visual Studio 17 2022 產生器現在基於 "Visual Studio 2022" 發行候選版本。之前它基於預覽版本。

3.21.5, 3.21.6, 3.21.7

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