CMake 3.27 版本發行說明¶
自 CMake 3.26 以來所做的變更包括下列項目。
新功能¶
偵錯器¶
cmake(1)
現在支援 CMake 語言的互動式偵錯。請參閱--debugger
選項。
預設集¶
cmake-presets(7)
檔案現在支援結構描述版本7
。cmake-presets(7)
現在支援$penv{}
巨集在include
欄位中的展開。
產生器¶
Makefile 和 Ninja 產生器現在支援使用
--dependency-file
連結器旗標,此旗標由 GNU Binutils 2.35 和 LLVM 的 LLD 12.0.0 新增,以便讓連結器讀取的檔案在變更時(通常是修改的時間戳記)會觸發重新連結。請參閱CMAKE_LINK_DEPENDS_USE_LINKER
變數。適用於 VS 14 (2015) 及更高版本的 Visual Studio 產生器 已學會使用
CMAKE_GENERATOR_PLATFORM
變數中的version=
欄位來明確選擇 Windows SDK 版本。請參閱 Visual Studio 平台選擇。
語言¶
CXX
語言現在將原始檔副檔名.ccm
、.cxxm
和.c++m
視為 C++。
基於檔案的 API¶
cmake-file-api(7)
"codemodel" 版本 2 的version
欄位已更新為 2.6。cmake-file-api(7)
"codemodel" 版本 2 "target" 物件在 "compileGroups" 物件中新增了 "frameworks" 欄位。
平台¶
現在可以為 macOS 上的共享函式庫建立 Apple 基於文字的 Stub(即
.tbd
檔案)。請參閱ENABLE_EXPORTS
屬性。
命令¶
add_custom_command()
命令新增了DEPENDS_EXPLICIT_ONLY
選項,以告知 Ninja 產生器 不要新增任何目標所暗示的依賴項。新增了CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY
變數,以便在所有add_custom_command()
命令的呼叫上啟用DEPENDS_EXPLICIT_ONLY
。新增了
cmake_file_api()
命令,供專案為目前的 CMake 執行新增CMake file API
查詢。find_package()
命令現在會搜尋由大寫<PACKAGENAME>_ROOT
CMake 變數和大寫<PACKAGENAME>_ROOT
環境變數所指定的前綴。請參閱政策CMP0144
。install(CODE)
和install(SCRIPT)
命令現在支援$<INSTALL_PREFIX>
產生器運算式。
變數¶
新增了
CMAKE_DLL_NAME_WITH_SOVERSION
變數和相關聯的DLL_NAME_WITH_SOVERSION
目標屬性,以選擇性地將SOVERSION
附加到 Windows 上共享函式庫的.dll
部分的檔名。新增了變數
CMAKE_VS_DEBUGGER_COMMAND
、CMAKE_VS_DEBUGGER_COMMAND_ARGUMENTS
、CMAKE_VS_DEBUGGER_ENVIRONMENT
和CMAKE_VS_DEBUGGER_WORKING_DIRECTORY
,以初始化對應的目標屬性。新增了
CMAKE_VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION
變數,以在建立所有目標時初始化所有目標上的VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION
目標屬性。
屬性¶
為 物件函式庫 新增了
CUDA_CUBIN_COMPILATION
目標屬性,以支援編譯為.cubin
檔案,而不是主機物件檔案。目前僅支援 NVIDIA。為 物件函式庫 新增了
CUDA_FATBIN_COMPILATION
目標屬性,以支援編譯為.fatbin
檔案,而不是主機物件檔案。目前僅支援 NVIDIA。為 物件函式庫 新增了
CUDA_OPTIX_COMPILATION
目標屬性,以支援編譯為.optixir
檔案,而不是主機物件檔案。目前僅支援 NVIDIA。<LANG>_CLANG_TIDY
、<LANG>_CPPCHECK
、<LANG>_CPPLINT
和<LANG>_INCLUDE_WHAT_YOU_USE
目標屬性現在支援產生器運算式
。<LANG>_LINKER_LAUNCHER
目標屬性現在支援產生器運算式
。新增了
SKIP_LINTING
原始檔屬性,以針對特定原始碼抑制目標範圍的程式碼檢查。
模組¶
FindCUDAToolkit
模組現在為cudla
提供匯入的目標,並為 CUPTI 的nvperf
和pcsampling
組件提供匯入的目標。FindDoxygen
模組的doxygen_add_docs()
命令新增了CONFIG_FILE
選項,以指定自訂的 doxygen 組態檔。FindOpenGL
模組新增了對組件GLES2
和GLES3
的支援。FindwxWidgets
模組現在提供匯入的目標。
產生器運算式¶
新增了
COMPILE_ONLY
產生器運算式,以指定僅編譯的使用需求,而沒有任何連結需求。新增了
TARGET_IMPORT_FILE
、TARGET_IMPORT_FILE_BASE_NAME
、TARGET_IMPORT_FILE_PREFIX
、TARGET_IMPORT_FILE_SUFFIX
、TARGET_IMPORT_FILE_NAME
和TARGET_IMPORT_FILE_DIR
產生器運算式。這些會展開為目標連結器匯入檔案的詳細資訊。新增了
TARGET_RUNTIME_DLL_DIRS
產生器運算式。它會展開為TARGET_RUNTIME_DLLS
中包含 DLL 的目錄列表。
自動產生¶
新增了
CMAKE_AUTOMOC_EXECUTABLE
、CMAKE_AUTORCC_EXECUTABLE
和CMAKE_AUTOUIC_EXECUTABLE
變數,以在建立目標時初始化對應的目標屬性。新增了
AUTOGEN_USE_SYSTEM_INCLUDE
目標屬性和對應的CMAKE_AUTOGEN_USE_SYSTEM_INCLUDE
變數,以明確控制是否將自動產生的標頭檔視為系統標頭檔。新增了
INTERFACE_AUTOMOC_MACRO_NAMES
目標屬性,以將moc
的巨集名稱指定為可傳遞的使用需求。
CTest¶
新增了
TIMEOUT_SIGNAL_NAME
和TIMEOUT_SIGNAL_GRACE_PERIOD
測試屬性,以指定在測試程序逾時時要傳送的 POSIX 訊號。
CPack¶
新增了
CPack Inno Setup 產生器
,用於使用 Inno Setup 進行封裝。
已棄用和移除的功能¶
與舊於 3.5 的 CMake 版本之相容性現在已被棄用,並將在未來的版本中移除。將政策版本設定為較舊值的
cmake_minimum_required()
或cmake_policy()
呼叫現在會發出棄用診斷訊息。額外產生器 已被棄用。IDE 可以使用
cmake-file-api(7)
來檢視 CMake 產生的專案組建樹狀結構。FindCUDA
模組自 CMake 3.10 以來已被棄用,現已透過政策CMP0146
移除。將專案移植到 CMake 的一流CUDA
語言支援。FindPythonInterp
和FindPythonLibs
模組自 CMake 3.12 以來已被棄用,現已透過政策CMP0148
移除。將專案移植到FindPython3
、FindPython2
或FindPython
。Visual Studio 9 2008
產生器現在已被棄用,並將在未來版本的 CMake 中移除。
其他變更¶
cmake --build $dir --verbose
現在會列印用於執行組建的工作目錄和命令列。ExternalProject
和FetchContent
模組現在將相對GIT_REPOSITORY
路徑解析為相對於父專案的遠端,而不是相對的本機檔案系統路徑。請參閱CMP0150
。當啟用
UPDATE_DISCONNECTED
選項時,ExternalProject
configure
步驟不再在每次組建時重新執行。只有在download
、update
或patch
步驟的詳細資訊變更時,才會重新執行。現在,即使啟用
UPDATE_DISCONNECTED
選項,如果ExternalProject
update
和patch
步驟的任何詳細資訊變更,它們都會始終重新執行。如果使用GIT
下載方法,且GIT_TAG
變更為本機上尚不知道的 Commit,則現在會發出錯誤,而不是靜默地使用先前的GIT_TAG
。FindPython
、FindPython2
和FindPython3
模組現在支援 Windows ARM64 平台。file(GET_RUNTIME_DEPENDENCIES)
命令現在會保留 Windows 上報告的 DLL 名稱的大小寫。它們仍然會轉換為小寫以進行篩選比對。現在 Apple Frameworks 會遵循
SYSTEM
目標屬性。適用於 VS 15.8 (2017) 及更新版本的 Visual Studio 產生器 現在會並行組建自訂命令。請參閱政策
CMP0147
。Visual Studio 產生器 用於 VS 14 (2015) 及更高版本現在更傾向於選擇最新的 Windows SDK 版本。請參閱政策
CMP0149
。
更新¶
自 CMake 3.27.0 以來所做的變更包括以下內容。
3.27.1¶
此版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新,以支援生態系統變更和/或修復回歸。
3.27.2¶
Visual Studio 產生器 用於 VS 14 (2015) 及更高版本現在更傾向於選擇最新的 Windows SDK,如政策
CMP0149
所記錄,當目標為任何 Windows 版本時。在 CMake 3.27.[0-1] 中,此偏好設定僅限於以 Windows 10 及更高版本為目標。Visual Studio 產生器 用於 VS 14 (2015) 及更高版本現在支援在
CMAKE_GENERATOR_PLATFORM
變數中使用version=8.1
來選擇 Windows 8.1 SDK。在 CMake 3.27.[0-1] 中,version=
欄位僅限於選擇 Windows 10 SDK。
3.27.3, 3.27.4, 3.27.5, 3.27.6, 3.27.7, 3.27.8¶
這些版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新,以支援生態系統變更和/或修復回歸。
3.27.9¶
The
cmake-file-api(7)
"codemodel" 版本 2 "target" 物件fileSets
欄位由 CMake 3.26.0 引入,其baseDirectories
成員的條目被錯誤地表示為絕對路徑,即使它們位於頂層原始碼目錄中。這已在 CMake 3.26.6 中修復,現在已在 3.27.9 中修復。用戶端必須更新以預期頂層原始碼目錄下的相對路徑。CMake 3.27.0 更新了 Ninja 產生器 中的 Fortran 模組依賴掃描,以使用精確的校對依賴。這本應修復在目標之間移動模組原始碼時發生的細微重建失敗。自那時以來,已發現多個案例,在使用 物件程式庫 時,精確的校對依賴項被錯誤地計算。其中一些案例已通過 3.27.x 修補程式系列逐步修復,但此後又發現了其他更細微的案例。為了避免 3.27 版本系列中進一步的變動,原始變更已被還原並延遲到未來版本的 CMake。