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``、ppc86

    • 通过 CMAKE_GENERATOR_TOOLSET 添加了对工具集选择的支持,例如``comp_201205``、comp_201510comp_201722_beta

    • 通过``GHS_TARGET_PLATFORM`` 添加了对平台选择的支持,例如``完整性``,linux``独立``等。

    • 不再检查是否安装了基于“arm”的编译器,而是确保存在正确的“gbuild.exe”。

    • 不再对 ARM 文件、BSP、工具集或操作系统位置进行硬编码。

命令行

  • 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_LIBRARY 和 DATAARRAY_LIBRARY 分别请求查找 Matlab C++ 引擎和 DataArray 库。

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

  • FindMatlab 模块获得了一个新的 MCC_COMPILER 组件来请求查找 Matlab 编译器插件。

  • FindPkgConfig 模块获得了在全局范围内创建导入目标的选项。

  • 除了已经支持的操作符 >=<= 和 `` 之外, FindPkgConfig 模块还支持用于版本检查的 <> 操作符=``。

  • 模块 FindPython3、模块:FindPython2FindPython 获得控制 macOS(框架)和 Windows(注册表)上资源查找顺序的能力。

  • FindSubversion 模块 Subversion_WC_INFO 命令获得了 IGNORE_SVN_FAILURE 选项来抑制失败,例如当源代码树不受 Subversion 控制时。

  • UseSWIG 模块学会了管理目标属性 INCLUDE_DIRECTORIES 以进行 SWIG 编译。

C测试

  • ctest(1) 获得了一个 --progress 选项,可以在输出到终端时启用实时测试进度摘要。

包装

  • CPack DEB Generator 学会了在设置 CPACK_DEBIAN_DEBUGINFO_PACKAGE 时将调试符号拆分为相应的 .ddeb 包。

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

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

弃用和删除的功能

  • 为策略“CMP0055”到“CMP0063”添加了明确的弃用诊断(“CMP0054”及以下已弃用)。 cmake-policies(7) 手册解释说所有策略的旧行为都已弃用,项目应该移植到新行为。

其他变化

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

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

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

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

  • BundleUtilities 模块可能不再包含在配置时。无论如何,这始终是一个错误。请参阅政策:policy:CMP0080

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

  • LINK_DIRECTORIES 目标属性现在需要绝对路径。请参阅政策:policy:CMP0081

  • CPack 生成器已移至文档中它们自己单独的部分,而不是将文档放在其内部实现模块中。这些内部实现模块也不再对可能错误包含它们的脚本可用,因为它们本来就不应该可用。

更新

自 CMake 3.13.0 以来所做的更改包括以下内容。

3.13.2

  • CMake 3.13.0 包含一项更改,将编译器隐式包含目录传递给 AUTOMOC 的``moc`` 工具。由于退化现有版本,这已被恢复,并且需要进一步调查才能在以后的版本中重新引入。

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