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、工具集或 OS 位置。
命令行¶
命令¶
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目标属性,用于使用 Visual Studio 生成器 为 VS 2010 及以上版本设置调试命令行参数。创建了
VS_DEBUGGER_ENVIRONMENT目标属性,用于使用 Visual Studio 生成器 为 VS 2010 及以上版本设置调试环境。VS_DEBUGGER_COMMAND和VS_DEBUGGER_WORKING_DIRECTORY目标属性现在支持生成器表达式。
模块¶
FindBoost模块增加了一个Boost_ARCHITECTURE选项,用于指定 Boost 特定架构的库文件名片段。FindCURL模块现已支持单独查找调试和发布版本。FindMatlab模块增加了新的组件ENGINE_LIBRARY和DATAARRAY_LIBRARY,分别用于请求查找 Matlab C++ Engine 和 DataArray 库。FindMatlab模块现在显式地在 Visual Studio 中导出 mexFunction。FindMatlab模块增加了一个新的MCC_COMPILER组件,用于请求查找 Matlab Compiler 插件。FindPkgConfig模块增加了一个选项,用于在全局范围内创建导入的目标。FindPkgConfig模块增加了对版本检查的<和>操作符的支持,以及已支持的>=、<=和=操作符。模块
FindPython3、FindPython2和FindPython增加了在 macOS (Framework) 和 Windows (Registry) 上控制资源查找顺序的能力。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 格式的文档。option()命令现在会尊重同名的现有普通变量,并且不再执行创建缓存条目(或设置其类型)并删除普通变量的操作。请参阅策略CMP0077。Makefile 生成器 现已支持在
make clean时移除自定义命令和自定义目标的副产品。target_sources()命令现在将相对源文件路径解释为相对于当前源目录。这简化了从子目录中逐步构建目标的源文件。添加了CMP0076策略以提供向后兼容,以便在需要时使用旧的行为。BundleUtilities模块可能不再在配置时包含。这实际上一直是一个 bug。请参阅策略CMP0080。LINK_DIRECTORIES目标属性现在期望绝对路径。请参阅策略CMP0081。CPack 生成器已移至文档的单独部分,而不是将其文档放在其内部实现模块中。这些内部实现模块也不再提供给可能错误地包含它们的脚本,因为它们实际上从未可用过。
更新¶
自 CMake 3.13.0 以来的变更包括以下内容。
3.13.2¶
CMake 3.13.0 包含一项更改,该更改会将编译器隐式包含目录传递给
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依赖项(在策略CMP0079NEW行为下)会错误地将这些依赖项的使用要求传播给链接该静态库的依赖项。此问题已修复。