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++ 引擎和 DataArray 库。

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

  • FindMatlab 模块新增了一个 MCC_COMPILER 组件,用于请求查找 Matlab 编译器插件。

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

  • FindPkgConfig 模块除了已经支持的 >=<== 运算符外,还新增了对版本检查中 <> 运算符的支持。

  • 模块 FindPython3FindPython2FindPython 获得了控制 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 的功能。

已弃用和已移除的功能

  • 为策略 CMP0055CMP0063 添加了显式弃用诊断(CMP0054 及以下版本已弃用)。cmake-policies(7) 手册解释了所有策略的 OLD 行为已弃用,并且项目应该移植到 NEW 行为。

其他更改

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

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

  • Makefile 生成器 学会了在 make clean 期间删除自定义命令和自定义目标的副产品。

  • target_sources() 命令现在将相对源文件路径解释为相对于当前源目录。这简化了从子目录增量构建目标源代码的过程。添加了 CMP0076 策略,以提供与旧行为的向后兼容性(旧行为需要相对路径相对于构建目录)。

  • BundleUtilities 模块可能不再在配置时包含。这本来就是一个错误。请参见策略 CMP0080

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

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