CMake 3.17 发行说明¶
自 CMake 3.16 做出的更改包括以下内容。
新特征¶
生成器¶
Visual Studio 生成器 学会支持按配置划分的源。以前只有 命令行构建工具生成器 支持它们。
CMAKE_GENERATOR_TOOLSET
设置中的 VS 2010 及更高版本的 Visual Studio 生成器 现在支持为项目文件指定VCTargetsPath
值。VS 2010 及更高版本的 Visual Studio 生成器 学会了支持 .NET Standard 和 .NET Core。参见
DOTNET_TARGET_FRAMEWORK
目标属性和相关的CMAKE_DOTNET_TARGET_FRAMEWORK
变量。
语言¶
现在,
Compile Features
功能为 CUDA 语言标准级别(例如cuda_std_03
、cuda_std_14
)提供了元特征。请参见CMAKE_CUDA_KNOWN_FEATURES
.
编译器¶
现在,IBM XL Fortran 编译器受
Ninja
生成器的支持。
命令行¶
命令¶
add_custom_command()
命令学习解释DEPENDS
参数中相对于当前二进制目录指定的路径。foreach()
命令学习了一个新选项ZIP_LISTS
,可用来同时对多个列表进行迭代。当使用
cmake -P
运行脚本 时,现在允许使用load_cache(READ_WITH_PREFIX)
命令模式。message()
命令学会了输出CMAKE_MESSAGE_CONTEXT
变量中提供的内容,适用于日志级别为NOTICE
及以下。使用新的--log-context
命令行选项或CMAKE_MESSAGE_CONTEXT_SHOW
变量来启用此输出。message()
命令有了三个新的关键字:CHECK_START
、CHECK_PASS
和CHECK_FAIL
。target_compile_options()
命令现在更一致地遵守BEFORE
关键字。请参阅策略CMP0101
。
变量¶
CMAKE_CTEST_ARGUMENTS
变量已被添加,用于指定在通过生成构建系统的test
(或RUN_TESTS
)目标运行时的 CTest 命令行自变量列表。现在可以在
function()
中定义下列变量:CMAKE_CUDA_RUNTIME_LIBRARY
变量与CUDA_RUNTIME_LIBRARY
target 属性用于选择在链接目标时使用的 CUDA 运行时库。CMAKE_FIND_DEBUG_MODE
变量用于在 cmake 运行期间向 stderr 中打印额外的find_*
调用信息。输出应由人工查看,而非用于解析。CMAKE_EXPORT_COMPILE_COMMANDS
变量的初始值现可从CMAKE_EXPORT_COMPILE_COMMANDS
环境变量中获取,而无需进行明确配置。CMAKE_<LANG>_COMPILER_LAUNCHER
变量的初始值现可从CMAKE_<LANG>_COMPILER_LAUNCHER
环境变量中获取,而无需进行明确配置。CMAKE_MESSAGE_LOG_LEVEL
变量现可用于使不同 CMake 运行之间保持日志级别,与仅适用于特定运行的--log-level
命令行选项不同。添加了
CMAKE_XCODE_SCHEME_ENVIRONMENT
变量,用于初始化XCODE_SCHEME_ENVIRONMENT
target 属性。CMAKE_XCODE_SCHEME_WORKING_DIRECTORY
变量和关联的XCODE_SCHEME_WORKING_DIRECTORY
目标属性已添加,以告知Xcode
生成器设置Custom Working Directory
架构选项的值。
属性¶
AIX_EXPORT_ALL_SYMBOLS
目标属性和关联的CMAKE_AIX_EXPORT_ALL_SYMBOLS
变量已被创建,用于选择性地明确禁用在 AIX 上从共享库中自动导出符号。DEPRECATION
目标属性已添加,用于将目标标记为已弃用。如果链接的目标被标记为已弃用,则会在生成时发出带有弃用消息的警告。INSTALL_NAME_DIR
目标属性现在支持生成器 表达式
。特别是,$<INSTALL_PREFIX>
生成器表达式可用于设置相对于安装时前缀的目录。添加 target 属性
MACHO_COMPATIBILITY_VERSION
和MACHO_CURRENT_VERSION
,分别为 Mach-O 二进制文件设置compatibility_version
和curent_version
。为了向后兼容,如果未设置这些属性,则分别使用SOVERSION
和VERSION
作为后备。VS_DOTNET_DOCUMENTATION_FILE
target 属性用于告知 Visual Studio Generators 在.csproj
文件中生成DocumentationFile
引用。
模块¶
ExternalProject
模块ExternalProject_Add()
命令获得GIT_SUBMODULES_RECURSE
选项,用于指定是否应递归更新 Git 子模块。默认设置为打开,以保留现有行为。添加
FindCUDAToolkit
模块,用于在不将 CUDA 作为语言启用时查找 CUDA Toolkit。FindCURL
模块已学会使用由 CURL 的 cmake 构建系统生成的CURLConfig.cmake
包配置文件查找 CURL。还获得CURL_NO_CURL_CMAKE
选项,用于禁用此行为。FindFLEX
模块的FLEX_TARGET
命令现在使用CMAKE_CURRENT_BINARY_DIR
作为工作目录来运行flex
。请参阅策略CMP0098
。模块
FindLibArchive
现在为 libarchive 提供一个导入目标。模块
FindPython
已学会查找由conda
管理的处于活动状态的虚拟环境中的 Python 组件。模块
FindPython3
和FindPython
分别获得了变量Python3_SOABI
和Python_SOABI
,为模块提供标准扩展后缀。此外,命令Python3_add_library()
和Python_add_library()
获得了选项WITH_SOABI
,以此将库后缀添加SOABI
的值作为前缀。模块
FindLibXml2
现在为xmllint
可执行文件提供导入目标。
Autogen¶
CTest¶
现在当使用
-C <cfg>
调用ctest(1)
时,变量CTEST_CONFIGURATION_TYPE
将会从命令行设置。工具
ctest(1)
获得了对 Dr. Memory 的支持,以运行 memcheck 运行。ctest(1)
工具获取了一个--no-tests=<[error|ignore]>
选项,用于在直接调用和脚本模式下明确设置和统一在没有找到测试时所采取的行为。ctest(1)
工具获取了一个--repeat <mode>:<n>
选项,用于指定重复测试的条件。这将现有的--repeat-until-fail <n>
选项进行了概括化,添加了until-pass
和after-timeout
的模式。ctest_test()
命令获取了一个REPEAT <mode>:<n>
选项,用于指定重复测试的条件。
CPack¶
CPack DragNDrop Generator
学会使用CPACK_DMG_<component>_FILE_NAME
变量,在将组件打包到它们自己的 DMG 中时设置自定义文件名。CPack DragNDrop Generator
学会处理 RTF 格式的许可证文件。当CPACK_DMG_SLA_DIR
变量被设置时,<language>.license.rtf
将被考虑,但仅当无法找到纯文本 (.txt
) 文件时的备用选择,为了维持向后兼容性。CPack NSIS Generator
获得了新变量CPACK_NSIS_MUI_HEADERIMAGE
\xa0来设置头图像。为避免破坏现有设置,如果新变量未设置,它仍默认为CPACK_PACKAGE_ICON
\xa0。CPack NSIS Generator
\xa0现在支持CPACK_NSIS_UNINSTALL_NAME
\xa0。它可用作指定卸载程序名称。CPack NSIS Generator
\xa0现在支持CPACK_NSIS_WELCOME_TITLE
\xa0和CPACK_NSIS_WELCOME_TITLE_3LINES
\xa0。可以用它们来指定欢迎页标题并在 3 行中显示它。CPack NSIS Generator
\xa0现在支持CPACK_NSIS_FINISH_TITLE
\xa0和CPACK_NSIS_FINISH_TITLE_3LINES
\xa0。可以用它们来指定完成页标题并在 3 行中显示它。CPack productbuild Generator
增加对CPACK_PRODUCTBUILD_BACKGROUND
变量的支持,用于指定 macOS 安装程序的背景图片。
其他¶
已弃用和已移除的功能¶
为策略
CMP0068
和策略CMP0069
(CMP0067
和以下版本已弃用) 添加了明确的弃用诊断信息。cmake-policies(7)
手册解释说所有策略的 OLD 行为都已弃用,项目应移植到 NEW 行为。CPack
PackageMaker
生成器已弃用,因为 Xcode 不再分发 PackageMaker 工具。未记录的OSXX11
生成器也已弃用。cmake(1)
命令行-E remove
和-E remove_directory
工具已弃用,推荐使用新的-E rm
工具。如果没有力强制选项,旧工具在命名的路径不存在时常常会返回 0,无法在不破坏兼容性的情况下修复它,所以被废弃。CPack NSIS Generator
现在需要 NSIS 3.0 或更高版本。
其他更改¶
file API
索引文件现在发送multiConfig
标记,指定生成器是否支持多个输出配置。目标链接属性
INTERFACE_LINK_OPTIONS
、INTERFACE_LINK_DIRECTORIES
和INTERFACE_LINK_DEPENDS
现在可以通过对静态库的私有依赖进行传递。请参阅策略CMP0099
。在使用 MinGW 工具时,
find_library()
命令默认不再查找.dll
文件。相反,它希望有可用的.dll.a
导入库。如果环境的
PATH
中存在sh.exe
,MinGW Makefiles
生成器不再发出错误。无论是在
PATH
的何处被调用为ninja-build
、ninja
或samu
,Ninja
生成器现在优先选择第一个出现在PATH
中的 ninja 构建工具。之前,PATH
的任何位置出现的这些名称中的第一个将被优先考虑。使用 SDCC 时,
sdar
工具现在优于sdcclib
作为库管理工具。后者在 SDCC 3.2.0 中已被弃用,并在 SDCC 3.8.6 中被移除。使用 SDCC 时,默认标志不再包括任何目标特定的标志。之前的默认标志是针对 8051 硬编码的。
在编译器标识和使用
add_custom_target()
命令创建的目标中,CMAKE_VS_GLOBALS
变量值现在适用。不再对
Xcode
生成器永久编码-Wmost
、-Wno-four-char-constants
和-Wno-unknown-pragmas
警告标志。
更新¶
自 CMake 3.17.0 起所做的更改包括以下内容。
3.17.1¶
CMake 3.17.0 更新了
CPack NSIS Generator
,其中包含需要 NSIS 3.0 或更高版本的更改。现已执行使用足够新版本的 CMake 3.17.1。
3.17.3¶
如果未设置
OBJC
或OBJCXX
环境变量,现在将选择 Objective C 或 C++ 编译器考虑CC
或CXX
环境变量。FindPkgConfig
模块现在将以-isystem
为前缀的包含目录提取到*_INCLUDE_DIRS
变量和INTERFACE_INCLUDE_DIRECTORIES
目标属性中。以前,它们会被置于*_CFLAGS_OTHER
变量和INTERFACE_COMPILE_OPTIONS
目标属性中。
3.17.5¶
CMAKE_AUTOMOC_PATH_PREFIX
的默认值已更改为OFF
,因为此功能可能会损坏在不同包含目录中具有相同名称头文件的现有项目。这恢复了CMake 3.15及其之前的行为的兼容性。在 3.16.9 中,默认值也已变为OFF
。