CMake 3.27 發行說明¶
自 CMake 3.26 以來的變更包括以下內容。
新功能¶
除錯器¶
cmake(1)
現在支援 CMake 語言的互動式除錯。請參閱--debugger
選項。
預設值¶
cmake-presets(7)
檔案現在支援架構版本7
。cmake-presets(7)
現在支援include
欄位中的$penv{}
巨集展開。
產生器¶
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" 版本 2version
欄位已更新至 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 檔案 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 Generator
,以使用 Inno Setup 進行封裝。
已棄用和移除的功能¶
與 3.5 之前的 CMake 版本相容性現已棄用,並將在未來版本中移除。呼叫
cmake_minimum_required()
或cmake_policy()
並將政策版本設定為較舊的值,現在會發出棄用診斷訊息。額外產生器 已被棄用。IDE 可以使用
cmake-file-api(7)
來檢視 CMake 產生的專案建置樹狀結構。自 CMake 3.10 起已棄用的
FindCUDA
模組,已透過政策CMP0146
移除。請將專案移植到 CMake 的第一級CUDA
語言支援。自 CMake 3.12 起已棄用的
FindPythonInterp
和FindPythonLibs
模組,已透過政策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
步驟的詳細資訊變更時才會重新執行。如果
ExternalProject
update
和patch
步驟的任何詳細資訊變更,即使已啟用UPDATE_DISCONNECTED
選項,它們現在都會重新執行。如果使用GIT
下載方法,且GIT_TAG
變更為本機尚未知道的 commit,現在會發出錯誤,而不是靜默地使用先前的GIT_TAG
。FindPython
、FindPython2
和FindPython3
模組現在支援 Windows ARM64 平台。file(GET_RUNTIME_DEPENDENCIES)
命令現在會保留 Windows 上報告的 DLL 名稱的大小寫。它們仍然會轉換為小寫以進行篩選比對。SYSTEM
目標屬性現在適用於 Apple Frameworks。適用於 VS 15.8 (2017) 及更新版本的Visual Studio 產生器現在會並行建置自訂命令。請參閱政策
CMP0147
。適用於 VS 14 (2015) 及更高版本的Visual Studio 產生器現在偏好選取最新的 Windows SDK 版本。請參閱政策
CMP0149
。
更新¶
自 CMake 3.27.0 以來所做的變更包括以下內容。
3.27.1¶
此版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新,以支援生態系統變更和/或修正回歸問題。
3.27.2¶
適用於 VS 14 (2015) 及更高版本的Visual Studio 產生器現在偏好選取最新的 Windows SDK,如政策
CMP0149
所記錄,當目標設定為任何 Windows 版本時。在 CMake 3.27.[0-1] 中,此偏好設定僅限於以 Windows 10 及更高版本為目標。適用於 VS 14 (2015) 及更高版本的Visual Studio 產生器現在支援在
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¶
CMake 3.26.0 引入的
cmake-file-api(7)
"codemodel" 版本 2 "target" 物件fileSets
欄位,其baseDirectories
成員的條目錯誤地表示為絕對路徑,即使它們位於頂層來源目錄內。這已在 CMake 3.26.6 中修正,現在已在 3.27.9 中修正。用戶端必須更新以期望頂層來源目錄下的相對路徑。CMake 3.27.0 更新了Ninja 產生器中的 Fortran 模組依賴項掃描,以使用精確的對應依賴項。這應該可以修正將模組來源在目標之間移動時發生的細微重建失敗。從那時起,已發現數種案例,在使用物件函式庫時,精確的對應依賴項會被錯誤地計算。其中一些案例已透過 3.27.x 修補程式系列逐步修正,但此後又發現其他更細微的案例。為了避免在 3.27 版本系列中進一步變動,原始變更已還原並延遲到未來版本的 CMake。