CMake 3.13 版本说明¶
自 CMake 3.12 以来的更改包括以下内容。
新特性¶
生成器¶
针对 VS 2010 及更高版本的 Visual Studio 生成器 已经学会支持
INTERPROCEDURAL_OPTIMIZATION
目标属性并支持CheckIPOSupported
模块。Xcode
生成器已经学会配置更多的 Xcode Scheme 字段。请参阅CMAKE_XCODE_GENERATE_SCHEME
变量。Green Hills MULTI
生成器已更新添加了通过
CMAKE_GENERATOR_PLATFORM
选择架构的支持:例如arm
、ppc
和86
。添加了通过
CMAKE_GENERATOR_TOOLSET
选择工具集的支持,例如comp_201205
、comp_201510
、comp_201722_beta
。添加了通过
GHS_TARGET_PLATFORM
选择平台的支持,例如integrity
、linux
、standalone
等。不再检查是否安装了基于
arm
的编译器,而是确保存在正确的gbuild.exe
。不再硬编码 ARM 文件、BSP、工具集或操作系统位置。
命令行¶
命令¶
add_custom_command()
和add_custom_target()
命令已经学会在WORKING_DIRECTORY
选项中支持生成器表达式。创建了
add_link_options()
命令以在当前目录中添加链接选项。install(TARGETS)
命令已经学会安装在当前目录之外创建的目标。link_directories()
命令获得了控制插入位置的选项。list(SORT)
命令获得了控制用于对条目进行排序的比较操作的选项。math()
命令获得了十六进制的选项。创建了
target_link_directories()
命令以指定目标及其依赖项的链接目录。创建了
target_link_options()
命令以指定目标及其依赖项的链接选项。现在可以调用
target_link_libraries()
命令来修改在当前目录之外创建的目标。请参阅策略CMP0079
。
变量¶
添加了
CMAKE_AUTOGEN_VERBOSE
变量以选择性地提高 CMake 项目代码中AUTOMOC
、AUTOUIC
和AUTORCC
的详细程度。添加了
CMAKE_VS_GLOBALS
变量以在创建目标时初始化目标上的VS_GLOBAL_<variable>
目标属性。
属性¶
添加了
DEPLOYMENT_ADDITIONAL_FILES
目标属性以告知Visual Studio 9 2008
生成器为远程调试指定要部署到 WinCE 设备的其他文件。创建了
INTERFACE_LINK_DEPENDS
目标属性以指定对文件的传递链接依赖项。LINK_DEPENDS
目标属性已经学会支持生成器表达式
。LINK_DIRECTORIES
和INTERFACE_LINK_DIRECTORIES
目标属性已添加以收集目标及其依赖项的链接目录。使用target_link_directories()
命令来设置它们。新增了
LINK_OPTIONS
和INTERFACE_LINK_OPTIONS
目标属性,用于收集目标及其依赖项的链接选项。可以使用target_link_options()
命令设置它们。新增了
LINK_OPTIONS
目录属性,用于收集当前目录下创建的目标的链接选项。可以使用add_link_options()
命令设置它。创建了
STATIC_LIBRARY_OPTIONS
目标属性,用于指定创建静态库时使用的归档器选项。创建了
VS_DEBUGGER_COMMAND_ARGUMENTS
目标属性,用于为 VS 2010 及更高版本的 Visual Studio 生成器 设置调试命令行参数。创建了
VS_DEBUGGER_ENVIRONMENT
目标属性,用于为 VS 2010 及更高版本的 Visual Studio 生成器 设置调试环境。VS_DEBUGGER_COMMAND
和VS_DEBUGGER_WORKING_DIRECTORY
目标属性现在支持生成器表达式。
模块¶
FindBoost
模块新增了一个Boost_ARCHITECTURE
选项,用于指定 Boost 架构相关的库文件名片段。FindCURL
模块学会了分别查找调试和发布版本。FindMatlab
模块新增了ENGINE_LIBRARY
和DATAARRAY_LIBRARY
组件,分别用于请求查找 Matlab C++ 引擎和 DataArray 库。FindMatlab
模块现在在 Visual Studio 中显式导出 mexFunction。FindMatlab
模块新增了一个MCC_COMPILER
组件,用于请求查找 Matlab 编译器插件。FindPkgConfig
模块新增了一个选项,可以在全局范围内创建导入的目标。FindPkgConfig
模块除了已经支持的>=
、<=
和=
运算符外,还新增了对版本检查中<
和>
运算符的支持。模块
FindPython3
、FindPython2
和FindPython
获得了控制 macOS(Framework)和 Windows(注册表)上资源查找顺序的能力。FindSubversion
模块的Subversion_WC_INFO
命令新增了一个IGNORE_SVN_FAILURE
选项,用于抑制错误,例如当源代码树不在 Subversion 控制下时。UseSWIG
模块学会了管理SWIG
编译的目标属性INCLUDE_DIRECTORIES
。
CTest¶
ctest(1)
新增了一个--progress
选项,用于在输出到终端时启用实时测试进度摘要。
CPack¶
CPack DEB Generator
学会了在设置CPACK_DEBIAN_DEBUGINFO_PACKAGE
时将调试符号拆分到相应的 .ddeb 包中。CPack DEB Generator
学会了在打包文件时遵守SOURCE_DATE_EPOCH
环境变量。这对于生成可重复的包很有用。CPack 新增了一个
CPack External Generator
,用于以其他软件可以理解的格式导出 CPack 元数据。此生成器的目的是允许外部打包软件在可能无法使用 CPack 进行整个打包过程时利用 CPack 的功能。
已弃用和已移除的功能¶
为策略
CMP0055
到CMP0063
添加了显式弃用诊断(CMP0054
及以下版本已弃用)。cmake-policies(7)
手册解释了所有策略的 OLD 行为已弃用,并且项目应该移植到 NEW 行为。
其他更改¶
cmake.org
上提供的预编译二进制文件现在包含 qthelp-format 文档。option()
命令现在会尊重同名存在的普通变量,并且不执行任何操作,而不是可能创建缓存条目(或设置其类型)并删除普通变量。请参见策略CMP0077
。Makefile 生成器 学会了在
make clean
期间删除自定义命令和自定义目标的副产品。target_sources()
命令现在将相对源文件路径解释为相对于当前源目录。这简化了从子目录增量构建目标源代码的过程。添加了CMP0076
策略,以提供与旧行为的向后兼容性(旧行为需要相对路径相对于构建目录)。BundleUtilities
模块可能不再在配置时包含。这本来就是一个错误。请参见策略CMP0080
。LINK_DIRECTORIES
目标属性现在期望使用绝对路径。请参阅策略CMP0081
。CPack 生成器已移动到文档中独立的部分,而不是将其文档放在其内部实现模块中。这些内部实现模块也不再可用于可能错误地包含它们的脚本,因为它们本来就不应该可用。
更新¶
自 CMake 3.13.0 以来所做的更改包括以下内容。
3.13.2¶
CMake 3.13.0 包含一项更改,即向
moc
工具传递编译器隐式包含目录,用于AUTOMOC
。由于导致现有构建出现回归,因此已将其恢复,并且需要在后续版本中重新引入之前进行进一步调查。
3.13.3¶
Visual Studio 15 2017
生成器已修复,可在安装 VS 2019 时正常工作。CMake 现在会在运行 CMake 时检查是否指定了源目录或二进制目录中的至少一个,如果两者都缺少,则会发出错误。这始终是已记录的要求,但之前的实现意外地接受了既未指定的情况,只要给出其他参数,就会将当前工作目录作为源树和构建树。
3.13.4¶
3.13.3 在既未指定源目录或二进制目录的情况下添加的错误已降级为警告。虽然这从未打算过、记录过或支持过,但一些项目依赖于它。在 3.13.x 版本系列的剩余时间内,错误已降级为警告,以允许过渡期,但它可能会在后续版本中再次变为致命错误。依赖于旧行为的脚本可以通过显式指定源树的路径(即使只是
.
)来轻松修复,并继续与所有版本的 CMake 一起工作。
3.13.5¶
在 CMake 3.13.0 到 3.13.4 中,调用
target_link_libraries()
以向在另一个目录中创建的静态库添加PRIVATE
依赖项(在策略CMP0079
NEW
行为下)将错误地将这些依赖项的使用要求传播到链接静态库的依赖项。此问题已修复。