CMake 3.30 發行說明

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

新功能

預設集

  • cmake-presets(7) 檔案現在支援結構描述版本 9include 欄位現在展開除了 $env{} 和預設集特定巨集之外的所有巨集,即那些從預設集定義內欄位衍生的巨集。

基於檔案的 API

  • cmake-file-api(7) "cmakeFiles" 版本 1 物件的 version 欄位已更新至 1.1。它新增了 globsDependent 欄位,以報告使用 CONFIGURE_DEPENDSfile(GLOB) 呼叫。

產生器

  • Visual Studio 產生器 現在將 UseDebugLibraries 指示器新增至 .vcxproj 檔案,以表示哪些組態是偵錯組態。請參閱政策 CMP0162

語言

  • 編譯功能 功能現在實作了對 cxx_std_26cuda_std_26 元功能的支援,以指示編譯器模式必須至少為 C++26。這些元功能最早在 CMake 3.25 中記錄,但尚未完全實作。

命令

  • add_library() 命令在不支援共享程式庫的平台上,現在會拒絕建立共享程式庫,而不是自動將它們轉換為靜態程式庫。請參閱政策 CMP0164

  • enable_language() 命令現在會在第一次 project() 呼叫之前呼叫時失敗並出現錯誤。請參閱政策 CMP0165

  • file(DOWNLOAD)file(UPLOAD) 命令新增了 TLS_VERSION <min> 選項,以指定連線到 https:// URL 的最低 TLS 版本。

變數

屬性

模組

產生器表達式

CTest

CPack

已棄用和移除的功能

其他變更

  • ctest(1) 現在會拒絕帶有錯誤的未知命令列引數。以前它們會被靜默忽略。

  • cmake.org 上提供的預先編譯 Windows .msi 安裝程式在執行全新安裝時,現在預設會修改系統範圍的 PATH。當取代現有的 3.30 或更高版本安裝時,預設會保留 PATH 修改偏好設定。

  • cmake.org 上提供的官方 .zip 原始碼封存現在使用 LF 換行符號,而不是 CRLF 換行符號,以與現代慣例保持一致。

  • 在 "Configuring done" 和 "Generating done" 訊息後列印的持續時間現在反映了在產生器特定步驟中花費的時間,以及在產生開始時未先前捕獲的程式碼模型評估步驟中花費的時間。列印的持續時間可能看起來比以前版本的 CMake 更長,但更準確。

  • FetchContent 現在傾向於直接填充內容,而不是使用單獨的子建置。這可能會顯著改善某些系統上的組態時間(尤其是 Windows,但在使用 Xcode 產生器時在 macOS 上也是如此)。cmake --fresh 也會強制重新執行直接填充依賴性的下載、更新和修補步驟。政策 CMP0168 為仍然依賴使用子建置來填充內容的專案提供向後相容性。

  • FETCHCONTENT_FULLY_DISCONNECTED 設定為 true 時,FetchContent_MakeAvailable()FetchContent_Populate() 的單一引數形式要求依賴性的原始碼目錄已填充。CMake 3.29 及更早版本未檢查此要求,但現在強制執行,但須遵守政策 CMP0170

更新

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

3.30.1, 3.30.2

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

3.30.3

3.30.4

  • 現在,project(<PROJECT-NAME>) 命令僅在 project() 被調用時,如果 <PROJECT-NAME>_SOURCE_DIR<PROJECT-NAME>_BINARY_DIR<PROJECT-NAME>_IS_TOP_LEVEL 已經設定為快取或非快取變數,才會將它們設定為普通變數。與之前一樣,同名的快取條目始終會被設定。此舉改進了 3.30.3 的行為變更,以恢復呼叫具有相同專案名稱的 project() 的巢狀目錄的行為,但此版本中的實作存在缺陷(此版本說明已追溯更新)。它可能會導致首次執行和後續執行之間出現不同的行為。如果您的專案包含使用相同專案名稱巢狀呼叫 project(),並且您使用這些變數,請勿使用 CMake 3.30.4。

3.30.5

3.30.6, 3.30.7, 3.30.8

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