CMake 3.30 發行說明¶
自 CMake 3.29 以來的變更包括以下內容。
新功能¶
預設值¶
cmake-presets(7)
檔案現在支援綱要版本9
。include
欄位現在會展開除了$env{}
和特定於預設值的巨集,也就是那些衍生自預設值定義內欄位的巨集之外的所有巨集。
基於檔案的 API¶
cmake-file-api(7)
"cmakeFiles" 版本 1 物件的version
欄位已更新為 1.1。它獲得了一個globsDependent
欄位來報告使用CONFIGURE_DEPENDS
的file(GLOB)
呼叫。
產生器¶
Visual Studio 產生器 現在會將
UseDebugLibraries
指示符新增至.vcxproj
檔案,以表示哪些組態是偵錯組態。請參閱政策CMP0162
。
語言¶
編譯功能
功能現在實作了對cxx_std_26
和cuda_std_26
元功能的支援,以表示編譯器模式必須至少為 C++26。這些元功能最初由 CMake 3.25 文件記錄,但尚未完全實作。
命令¶
在不支援共享程式庫的平台上,
add_library()
命令現在會拒絕建立共享程式庫,而不是自動將它們轉換為靜態程式庫。請參閱政策CMP0164
。如果
enable_language()
命令在第一次project()
呼叫之前被呼叫,則該命令現在會失敗並顯示錯誤。請參閱政策CMP0165
。file(DOWNLOAD)
和file(UPLOAD)
命令獲得了TLS_VERSION <min>
選項,以指定連線到https://
URL 的最小 TLS 版本。
變數¶
新增了
CMAKE_<LANG>_STANDARD_LATEST
變數,以描述選定編譯器支援的最新<LANG>
語言標準。新增了
CMAKE_TLS_VERIFY
環境變數,作為現有CMAKE_TLS_VERIFY
變數的後備方案。它指定是否預設驗證https://
URL 的伺服器憑證。新增了
CMAKE_TLS_VERSION
變數和CMAKE_TLS_VERSION
環境變數,以指定file(DOWNLOAD)
和file(UPLOAD)
命令連線到https://
URL 的預設最小 TLS 版本。新增了
CMAKE_VS_USE_DEBUG_LIBRARIES
變數和對應的VS_USE_DEBUG_LIBRARIES
目標屬性,以明確控制.vcxproj
檔案中的UseDebugLibraries
指示符。
屬性¶
現在所有目錄中都可以看到
GENERATED
原始碼檔案屬性。請參閱政策CMP0163
。已修訂政策CMP0118
的文件,以描述其實際效果。可以使用
PROPAGATE_TOP_LEVEL_INCLUDES_TO_TRY_COMPILE
全域屬性,將CMAKE_PROJECT_TOP_LEVEL_INCLUDES
傳播到使用整個專案簽名 的try_compile()
呼叫中。這主要是為了讓依賴提供者可以在此類try_compile()
呼叫中啟用。新增了
VS_FILTER_PROPS
目標屬性,以告知 Visual Studio 產生器 使用自訂 MSBuild 篩選.props
檔案。
模組¶
ExternalProject
模組的ExternalProject_Add()
命令獲得了TLS_VERSION <min>
選項,並支援CMAKE_TLS_VERSION
變數和CMAKE_TLS_VERSION
環境變數,以指定連線到https://
URL 的最小 TLS 版本。FindBacktrace
模組現在提供一個匯入的目標。-
新變數
Python_EXECUTABLE_DEBUG
Python_INTERPRETER
Python_DEBUG_POSTFIX
新目標
Python::InterpreterDebug
Python::InterpreterMultiConfig
產生器運算式¶
CTest¶
CPack¶
現在,
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¶
現在,
project(<PROJECT-NAME>)
命令只有在調用project()
時,如果<PROJECT-NAME>_SOURCE_DIR
、<PROJECT-NAME>_BINARY_DIR
和<PROJECT-NAME>_IS_TOP_LEVEL
已被設定為非快取變數時,才會將它們設定為非快取變數。同名的快取條目仍會像之前一樣設定。此變更完善了 3.30.3 的行為變更,以恢復呼叫相同專案名稱的project()
的巢狀目錄的行為,並解決了 3.30.4 中引入的實作錯誤。