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 產生器 用於設定
VS_PACKAGE_REFERENCES
目標屬性的專案時,cmake(1)
--build
命令現在會自動從 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++ 編譯器,編譯器識別碼為
IBMClang
。現在支援 MCST LCC 編譯器,編譯器識別碼為
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。透過這些變數,現在可以將產品安裝到使用者的主目錄,而無需管理員權限。
已棄用和移除的功能¶
其他變更¶
CUDA
目標現在可以同時啟用CUDA
編譯器偵測現在如果無法計算所需的預設架構,會在所有情況下發出錯誤(請參閱
在 Clang 上處理
支援多個預設架構的理論情況,以及
嘗試偵測無效的架構並發出錯誤。
define_property()
命令的BRIEF_DOCS
和FULL_DOCS
參數現在是可選的。ccmake(1)
現在可以在從原始碼建置 CMake 時在 Windows 上啟用。這項功能是實驗性的,因此未包含在官方發行版本中。
更新¶
自 CMake 3.23.0 以來所做的變更包括以下內容。
3.23.1¶
在 CMake 3.23.0 中新增的
target_sources()
FILE_SET
功能尚未將標頭檔正確放置在 AppleFRAMEWORK
目標中。在未來版本的 CMake 中進行進一步工作之前,現在若要在 Apple 平台上將類型為HEADERS
的FILE_SET
新增至此類目標會出現錯誤。在 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¶
這些版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新,以支援生態系統的變更和/或修正回歸。