CMake 3.23 版本發行說明¶
自 CMake 3.22 以來進行的變更包括以下內容。
新功能¶
預設集¶
cmake-presets(7)
檔案現在支援架構版本4
。cmake-presets(7)
檔案現在有一個可選的include
欄位,允許檔案包含其他檔案。cmake-presets(7)
檔案現在支援${fileDir}
巨集,其中包含預設集檔案所在的目錄。cmake-presets(7)
獲得了在建置預設集中指定resolvePackageReferences
命令列選項的支援,以控制從外部套件管理器還原套件參考的行為。目前,這僅受 Visual Studio 產生器支援,以支援從 NuGet 還原套件。其他產生器會忽略此選項。
產生器¶
適用於 VS 2019 及更高版本的 Visual Studio 產生器 學習支援 C# 專案的 .NET SDK 樣式專案檔案 (
.csproj
)。請參閱DOTNET_SDK
目標屬性和對應的CMAKE_DOTNET_SDK
變數。add_custom_command()
尚不支援 .NET SDK 樣式的專案。適用於 VS 2017 及更高版本的 Visual Studio 產生器 學習使用 VS 安裝程式未知的 Visual Studio 可攜式實例。請參閱
CMAKE_GENERATOR_INSTANCE
變數。
命令列¶
當與 Visual Studio 產生器 一起使用時,
cmake(1)
--build
命令在設定VS_PACKAGE_REFERENCES
目標屬性的專案上,現在會自動從 NuGet 還原套件參考。快取變數CMAKE_VS_NUGET_PACKAGE_RESTORE
可以設定為在建置樹狀結構中切換此行為。使用--resolve-package-references
命令列選項來控制單次調用時的行為。cmake(1)
命令列工具新增了--debug-find-pkg
選項,以啟用特定find_package()
呼叫下的偵錯訊息。cmake(1)
命令列工具新增了--debug-find-var
選項,以啟用使用特定結果變數的find_*
呼叫的偵錯訊息。
編譯器¶
現在支援基於 LLVM 的 IBM Open XL C/C++ 編譯器,編譯器 ID 為
IBMClang
。現在支援 MCST LCC 編譯器,編譯器 ID 為
LCC
。請參閱政策CMP0129
。
基於檔案的 API¶
cmake-file-api(7)
"codemodel" 版本 2version
欄位已更新為2.4
。cmake-file-api(7)
"codemodel" 版本 2directory
物件installers
欄位新增了fileSet
安裝程式類型。
命令¶
define_property()
命令新增了INITIALIZE_FROM_VARIABLE
選項,以使目標屬性在建立目標時從變數初始化。install(TARGETS)
命令新增了FILE_SET
引數,可用於安裝與目標關聯的標頭檔案集。string(TIMESTAMP)
和file(TIMESTAMP)
命令現在支援微秒的%f
指定符。target_sources()
命令新增了FILE_SET
模式,可用於將標頭新增為目標的僅標頭來源檔案。
變數¶
CMAKE_CUDA_ARCHITECTURES
變數和關聯的CUDA_ARCHITECTURES
目標屬性現在支援 CUDA 工具組 7.0+ 的all
和all-major
值。新增了
CMAKE_IGNORE_PREFIX_PATH
和CMAKE_SYSTEM_IGNORE_PREFIX_PATH
變數,以告知find_package()
、find_program()
、find_library()
、find_path()
和find_file()
命令忽略指定的字首。新增了
CMAKE_LINK_LIBRARIES_ONLY_TARGETS
變數和對應的LINK_LIBRARIES_ONLY_TARGETS
目標屬性,以選擇性地要求所有可以是目標名稱的連結項目實際上是現有目標的名稱。
屬性¶
新增了
HEADER_SETS
和INTERFACE_HEADER_SETS
唯讀目標屬性,以列出與目標關聯的標頭集。新增了
HEADER_SET
和HEADER_SET_<NAME>
目標屬性,以分別列出預設標頭集和具名標頭集中的檔案。新增了
HEADER_DIRS
和HEADER_DIRS_<NAME>
目標屬性,以分別指定預設標頭集和具名標頭集的基礎目錄。新增了
IMPORTED_NO_SYSTEM
目標屬性,以指定 匯入目標 不應被視為系統函式庫(即,其包含目錄不會自動成為SYSTEM
)。新增了
XCODE_EMBED_PLUGINS
目標屬性,以告知Xcode
產生器要將哪些目標放入Embed PlugIns
建置階段。新增了
XCODE_SCHEME_ENABLE_GPU_FRAME_CAPTURE_MODE
目標屬性和支援的CMAKE_XCODE_SCHEME_ENABLE_GPU_FRAME_CAPTURE_MODE
變數,以告知Xcode
產生器啟用指定 Xcode 方案選項屬性GPU Frame Capture
。
模組¶
CheckPIESupported
模組現在支援OBJC
、OBJCXX
、CUDA
和HIP
語言。它現在也採用CMAKE_SYSROOT
和CMAKE_OSX_SYSROOT
。ExternalProject
模組的ExternalProject_Add()
命令獲得了對USES_TERMINAL_PATCH
選項的支援,以在修補步驟中提供獨佔終端機存取權。FindCUDAToolkit
模組現在為libcufft_static_nocallback
提供目標(如果找到)。FindGLUT
模組現在提供GLUT_INCLUDE_DIRS
結果變數,以符合cmake-developer(7)
手冊中記錄的命名慣例。這取代了舊版的GLUT_INCLUDE_DIR
變數。FindGTest
模組現在為 GMock 提供目標(如果找到)。FindVulkan
模組現在提供報告版本號碼的Vulkan_VERSION
結果變數。
CTest¶
ctest(1)
新增了CTEST_SUBMIT_INACTIVITY_TIMEOUT
變數,可用於指定提交閒置逾時時間。
CPack¶
CPack productbuild Generator
新增了CPACK_PRODUCTBUILD_DOMAINS
、CPACK_PRODUCTBUILD_DOMAINS_ANYWHERE
、CPACK_PRODUCTBUILD_DOMAINS_USER
和CPACK_PRODUCTBUILD_DOMAINS_ROOT
變數,用於將 domains 元素新增至 Distribution XML。借助這些變數,現在可以在不需要管理員權限的情況下將產品安裝到使用者的主目錄中。CPack productbuild Generator
新增了一個變數CPACK_PRODUCTBUILD_IDENTIFIER
,用於自訂與產品關聯的唯一產品識別碼。CPack.distribution.dist.in
範本(由CPack productbuild Generator
和 CPackPackageMaker
產生器使用)已更新為使用新的CPACK_APPLE_PKG_INSTALLER_CONTENT
變數作為其主要內容。這取代了先前未記錄且現在已棄用的CPACK_PACKAGEMAKER_CHOICES
變數。CPack IFW Generator
新增了CPACK_IFW_ARCHIVE_FORMAT
和CPACK_IFW_ARCHIVE_COMPRESSION
變數,用於設定封裝新元件資料封存時使用的格式,並選擇使用的壓縮層級。這些功能適用於 QtIFW 4.2 及更新版本。CPack IFW Generator
新增了CPACK_IFW_PACKAGE_DISABLE_COMMAND_LINE_INTERFACE
變數,以防止使用者將任何消費者命令傳遞給安裝程式,例如install
、update
和remove
。此功能適用於 QtIFW 4.0 及更新版本。CPack IFW Generator
新增了CPACK_IFW_PACKAGE_PRODUCT_IMAGES
變數,用於新增要在PerformInstallationPage
上顯示的影像清單。此功能適用於 QtIFW 4.0 及更新版本。CPack IFW Generator
新增了CPACK_IFW_PACKAGE_RUN_PROGRAM
、CPACK_IFW_PACKAGE_RUN_PROGRAM_ARGUMENTS
和CPACK_IFW_PACKAGE_RUN_PROGRAM_DESCRIPTION
變數,用於在使用者接受操作後,在安裝程式完成後執行命令。此功能適用於 QtIFW 4.0 及更新版本。CPack IFW Generator
新增了CPACK_IFW_PACKAGE_SIGNING_IDENTITY
變數,用於指定程式碼簽署身分,以用於簽署產生的應用程式套件組合。此功能僅在 macOS 上可用,且適用於 QtIFW 3.0 及更新版本。新的
CPack WIX Generator
產生器新增了一個變數,CPACK_WIX_SKIP_WIX_UI_EXTENSION
,以跳過 WixUIExtensions 的包含。
已棄用和移除的功能¶
cmake(1)
現在在指定多個來源路徑時會發出警告,例如cmake -S src1 src2
。這從未被正式記錄或支援,但舊版本意外地接受了多個來源路徑並使用了最後指定的路徑。請更新腳本以避免傳遞多個來源路徑參數。cpack(1)
未記錄的OSXX11
產生器已被移除。先前未記錄的
CPACK_PACKAGEMAKER_CHOICES
變數,用於CPack.distribution.dist.in
範本中,已被新的CPACK_APPLE_PKG_INSTALLER_CONTENT
變數取代。這僅影響那些提供自己客製化CPack.distribution.dist.in
範本檔案,但仍依賴CPACK_PACKAGEMAKER_CHOICES
設定的專案。這些客製化範本檔案應更新為使用CPACK_APPLE_PKG_INSTALLER_CONTENT
,或完全定義所有範本檔案的內容,而無需依賴任何變數的替換。
其他變更¶
新的
CPack DragNDrop Generator
不再將CPACK_RESOURCE_FILE_LICENSE
作為授權協議附加到產生的.dmg
中,除非透過CPACK_DMG_SLA_USE_RESOURCE_FILE_LICENSE
選項明確啟用。在 CMake 專案中,CPack
模組預設啟用此選項以實現相容性。CUDA
目標現在可以同時啟用CUDA_SEPARABLE_COMPILATION
和CUDA_PTX_COMPILATION
。CUDA
編譯器偵測現在在所有無法計算預設架構的情況下,如果需要(請參閱
CMP0104
),會發出錯誤,處理 Clang 上
CMAKE_CUDA_ARCHITECTURES
的OFF
,支援多個預設架構的理論情況,以及
嘗試偵測無效的架構並發出錯誤。
搭配 Clang 的
CUDA
現在實作了政策CMP0105
以及$<DEVICE_LINK:...>
和$<HOST_LINK:...>
產生器表達式。define_property()
命令的BRIEF_DOCS
和FULL_DOCS
參數現在是選填的。從原始碼建置 CMake 時,現在可以在 Windows 上啟用
ccmake(1)
。這是實驗性的,因此未包含在官方發行版本中。
更新¶
自 CMake 3.23.0 以來進行的變更包括以下內容。
3.23.1¶
CMake 3.23.0 中新增的
target_sources()
FILE_SET
功能尚未將標頭檔正確放置在 AppleFRAMEWORK
目標中。在 CMake 未來版本中進行進一步工作之前,現在將HEADERS
類型的FILE_SET
新增到 Apple 平台上的此類目標會產生錯誤。CMake 3.23.0 中新增的
HEADER_SETS
和INTERFACE_HEADER_SETS
目標屬性現在是target_sources()
命令建立的標頭集合的唯讀記錄。
3.23.2¶
在 CMake 3.23.0 中,
CPack.distribution.dist.in
範本檔案中使用的CPACK_PACKAGEMAKER_CHOICES
變數已被新的CPACK_APPLE_PKG_INSTALLER_CONTENT
變數取代。這破壞了那些提供自己範本檔案但仍期望定義CPACK_PACKAGEMAKER_CHOICES
變數的專案。舊的CPACK_PACKAGEMAKER_CHOICES
變數現在也設定為與之前相同的內容,但它已被正式棄用。
3.23.3、3.23.4、3.23.5¶
這些版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新以支援生態系統變更和/或修復回歸。