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_DEBIAN_DEBUGINFO_PACKAGE 时,CPack DEB Generator 学习将调试符号拆分到相应的 .ddeb 包中。

  • 在打包文件时,CPack DEB Generator 学习遵循 SOURCE_DATE_EPOCH 环境变量。 这对于生成可重现的包很有用。

  • CPack 获得了一个新的 CPack External Generator,用于以其他软件可以理解的格式导出 CPack 元数据。 此生成器的目的是允许外部打包软件在无法为整个打包过程使用 CPack 时,利用 CPack 的功能。

已弃用和移除的特性

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

其他更改

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

  • 现在,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 包含一项更改,用于将编译器隐式包含目录传递给 AUTOMOCmoc 工具。 由于回归现有构建,此更改已恢复,需要在以后的版本中重新引入之前进行进一步调查。

3.13.3

  • 修复了 Visual Studio 15 2017 生成器,以便在安装 VS 2019 时正常工作。

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