CMake 3.13 发行说明

自 CMake 3.12 以来的变更包括以下内容。

新功能

生成器

命令行

  • cmake(1) 命令增加了 -S <source_dir> 命令行选项来指定源目录的位置。此选项可以独立于 -B 使用。

  • cmake(1) 命令增加了 -B <build_dir> 命令行选项来指定构建目录的位置。此选项可以独立于 -S 使用。

  • cmake(1)-E create_symlink 命令现在可以在 Windows 上使用。

命令

变量

属性

模块

  • FindBoost 模块增加了一个 Boost_ARCHITECTURE 选项,用于指定 Boost 特定架构的库文件名片段。

  • FindCURL 模块现已支持单独查找调试和发布版本。

  • FindMatlab 模块增加了新的组件 ENGINE_LIBRARYDATAARRAY_LIBRARY,分别用于请求查找 Matlab C++ Engine 和 DataArray 库。

  • FindMatlab 模块现在显式地在 Visual Studio 中导出 mexFunction。

  • FindMatlab 模块增加了一个新的 MCC_COMPILER 组件,用于请求查找 Matlab Compiler 插件。

  • FindPkgConfig 模块增加了一个选项,用于在全局范围内创建导入的目标。

  • FindPkgConfig 模块增加了对版本检查的 <> 操作符的支持,以及已支持的 >=<== 操作符。

  • 模块 FindPython3FindPython2FindPython 增加了在 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 完成整个打包过程时。

已弃用和已删除的功能

  • 为策略 CMP0055CMP0063CMP0054 及更早版本已弃用)添加了明确的弃用诊断。 cmake-policies(7) 手册解释说,所有策略的 OLD 行为均已弃用,项目应迁移到 NEW 行为。

其他更改

  • cmake.org 上提供的预编译二进制文件现在包含 qthelp 格式的文档。

  • option() 命令现在会尊重同名的现有普通变量,并且不再执行创建缓存条目(或设置其类型)并删除普通变量的操作。请参阅策略 CMP0077

  • Makefile 生成器 现已支持在 make clean 时移除自定义命令和自定义目标的副产品。

  • target_sources() 命令现在将相对源文件路径解释为相对于当前源目录。这简化了从子目录中逐步构建目标的源文件。添加了 CMP0076 策略以提供向后兼容,以便在需要时使用旧的行为。

  • BundleUtilities 模块可能不再在配置时包含。这实际上一直是一个 bug。请参阅策略 CMP0080

  • UseSWIG 模块已更改了目标命名策略。请参阅策略 CMP0078

  • 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 依赖项(在策略 CMP0079 NEW 行为下)会错误地将这些依赖项的使用要求传播给链接该静态库的依赖项。此问题已修复。