CMake 3.23 Œì—°¶
CMake 3.22 ©±Â·¶Ëµ¥²¿¶þÖ®Ëù³ö²¡:
µ±¶È¶
ÃÐ͵¶
cmake-presets(7)
ÐźÅÖ®ÃæµÝ¶þ֮·ò²Ë¥4.cmake-presets(7)
Ðźŵ±Ç°°Ù¼ÁÓ³ÉË¥»ùʱinclude
»°ÕÕ¶š,¿É¬êµ±Ç°ºóÓ³ÉԬ궚.cmake-presets(7)
ËãÖ®µ±Ç°°Ù¼ÁÓ³ÖêÔª${fileDir}
³¬½Ó,³¬½Óʽµ±Ç°ÐźÅÐźÅÇø¶š.
ρÎʶ
ÕýVS 2019µ½¼ÆµÄVisual Studio ρÎÊÐÇȨ¹ýÕ¹ÑÔC#µç»°Ê±Ê¹Àí»ù¶¥²ã˵ÌΫ².±í¼Æ
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++ 编译器现受支持,其编译器 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
目标属性,以指定不应将 导入目标 视为系统库(即,其 include 目录不会自动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
选项,为补丁步骤提供独占终端访问权限。如果找到
libcufft_static_nocallback
,FindCUDAToolkit
模块现在提供一个目标。FindGLUT
模块现在提供GLUT_INCLUDE_DIRS
结果变量,以符合cmake-developer(7)
手册中记录的命名约定。这取代了旧的GLUT_INCLUDE_DIR
变量。如果找到 GMock,
FindGTest
模块现在提供一个目标。如果找到 Vulkan,
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
变量,用于向 Distribution XML 添加域元素。现在使用这些变量,可以将产品安装到用户的主目录,而无需管理权限。CPack productbuild Generator
获得新变量CPACK_PRODUCTBUILD_IDENTIFIER
,用于定制与产品关联的唯一产品标识符。CPack productbuild Generator
和 CPackPackageMaker
生成的CPack.distribution.dist.in
模板已更新为为其主要内容使用新的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
使您可以跳过包含 WixUIExtensions,CPACK_WIX_SKIP_WIX_UI_EXTENSION
。
已弃用和已移除功能¶
cmake(1)
现在在指定多个源路径时发出警告,如cmake -S src1 src2
中指定多个源路径时。此功能从未正式记录或获得支持,但旧版本意外地接受了多个源路径并使用了最后指定的路径。请更新脚本以避免传递多个源路径参数。cpack(1)
未记录的OSXX11
生成器已移除。CPack.distribution.dist.in
模板中使用的之前未记录的CPACK_PACKAGEMAKER_CHOICES
变量已替换为新的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
参数现在是可选的。ccmake(1)
现在可以在从源代码构建CMake时在Windows上启用。这是实验性的,因此未包含在官方发行版中。
更新¶
自CMake 3.23.0以来进行的更改包括以下内容。
3.23.1¶
CMake 3.23.0 中新增的
target_sources()
FILE_SET
功能尚未在 AppleFRAMEWORK
目标中正确放置头文件。在未来版本的 CMake 中进行进一步工作前,目前 Apple 平台上对此类目标添加类型为FILE_SET
的HEADERS
会出错。CMake 3.23.0 中新增的
HEADER_SETS
和INTERFACE_HEADER_SETS
目标属性现在是target_sources()
命令创建的头文件集的只读记录。
3.23.2¶
在
CPack.distribution.dist.in
模板文件中使用的CPACK_PACKAGEMAKER_CHOICES
变量在 CMake 3.23.0 中被新的CPACK_APPLE_PKG_INSTALLER_CONTENT
变量所替代。这打破了已提供自己的模板文件但仍希望定义CPACK_PACKAGEMAKER_CHOICES
变量的项目。现在的旧CPACK_PACKAGEMAKER_CHOICES
变量也已被设置为以前的内容,但它正式弃用。
3.23.3、3.23.4、3.23.5¶
这些版本未对经记录的功能或接口进行任何更改。一些实施更新已进行以支持生态系统更改和/或修正回归。