CMake 3.6 发行说明

自 CMake 3.5 起做出的变更包括以下内容。

新特性

生成器

  • Ninja 生成器学会生成形式为 sub/dir/all 的虚拟目标,以驱动子目录的构建。这相当于 Makefile 生成器cd sub/dir; make all

  • Ninja 生成器现在在构建依赖中包括系统头文件,以确保在更新系统包时正确重新构建。

  • Visual Studio 14 2015 生成器学会支持 Clang/C2 工具集,例如使用 -T v140_clang_3_7 选项。此特性是实验性质的。

命令

变量

属性

模块

  • CMakePushCheckState 模块现已推送/弹出/重置变量 CMAKE_EXTRA_INCLUDE_FILES,该变量已用于 CheckTypeSize

  • ExternalProject 模块懂得了 GIT_SHALLOW 1 选项,用以执行 Git 仓库的浅克隆。

  • ExternalProject 模块学会了递归初始化 Git 子模块,以及在更新时初始化新的子模块。使用 GIT_SUBMODULES 选项来限制要初始化和更新的子模块。

  • ExternalProject 模块懂得了 DOWNLOAD_NO_EXTRACT 1 参数,用于跳过已下载文件的提取(例如,用于自解压 Shell 安装程序或 .msi 文件)。

  • ExternalProject 模块现已使用 TLS_VERIFY,从 git 仓库中获取。

  • FindBLASFindLAPACK 模块学会了支持 OpenBLAS

  • FindCUDA 模块学会了查找 cublas_device 库。

  • FindGTest 模块 gtest_add_tests 函数现已导致 CMake 在测试来源更改后自动重新运行,以便可以重新扫描它们。

  • 模块 FindLTTngUST 已被引入以查找 LTTng-UST 库。

  • 模块 FindPkgConfig 学会了为找到的库选择性地创建导入目标。

  • 模块 FindProtobuf 学会了提供 Protobuf_VERSION 变量,并在 find_package() 调用中检查要求的版本号。

  • 模块 InstallRequiredSystemLibraries 了解了一个新的 CMAKE_INSTALL_UCRT_LIBRARIES 选项,以利用 Visual Studio 2015 完成 Windows Universal CRT 库的应用本地部署。

平台

  • CYGWIN 现支持 Clang 编译器。

  • 增加了对使用编译器 ID Bruce 的 Bruce C 编译器的支持。

CTest

CPack

其他

  • 现在 Compile Features 功能支持 Intel C++ 编译器版本 12.1 至 16.0 在 UNIX 平台上支持的功能。

已弃用和已删除的功能

  • CMakeForceCompiler 模块及其宏现在已弃用。有关说明,请参见模块文档。

  • 命令 find_library()find_path()find_file() 不再在非 Windows 平台上从 PATH 环境变量衍生的安装前缀中搜索。此行为已在 CMake 3.3 中添加,以支持 Windows 主机,但已证明在 UNIX 主机上存在问题。仅为了他们的工具而将一些 <prefix>/bin 目录保留在 PATH 中的用户不一定希望搜索任何支持 <prefix>/lib 目录。用户可以设置 CMAKE_PREFIX_PATH 环境变量,其中包含一个 用分号分隔的列表,其中包含要搜索的前缀。

  • 生成器 Visual Studio 7 .NET 2003 现已弃用,并将从未来版本的 CMake 中移除。

  • 生成器 Visual Studio 7(适用于 VS .NET 2002)已移除。它已从 CMake 3.3 起弃用。

  • 已移除生成器 Visual Studio 6。它已从 CMake 3.3 起弃用。

其他更改

  • cmake.org 上提供的预编译的 OS X 二进制文件现在需要 OS X 10.7 或更高版本。

  • 在 Linux 和 FreeBSD 平台上,当自行从源码构建 CMake,而不使用系统提供的 libcurl 时,如果在系统上发现了 OpenSSL,现在会默认使用 OpenSSL。此举为支持网络通信的命令(通过 https,例如 file(DOWNLOAD)file(UPLOAD)ctest_submit())启用 SSL/TLS 支持。

  • 命令行工具 cmake(1) --build 现在会以错误拒绝多个 --target 选项,而不是忽略除最后一个选项以外的所有选项。

  • AUTOMOC 现在能在不同的目录中,当多个源文件同时使用 #include <moc_foo.cpp> 且同名(因为生成 moc_foo.cpp 文件时会冲突)时检测到名称冲突。

  • FindBISON 模块的 BISON_TARGET 宏现在支持特殊字符,方法是将 VERBATIM 选项传递给内部 add_custom_command() 调用。这可能会破坏手动添加转义符来解决此错误的客户端。

  • FindFLEX 模块的 FLEX_TARGET 宏现在支持特殊字符,方法是将 VERBATIM 选项传递给内部 add_custom_command() 调用。这可能会破坏手动添加转义符来解决此错误的客户端。

  • FindProtobuf 模块的输入和输出变量均从 PROTOBUF_ 重命名为 Protobuf_,以与其他查找模块保持一致。提供了旧例中的输入变量,旧例中的输出变量始终提供。

  • CPack RPM Generator 现在支持特定于每个组件的 CPackRPM 特定变量中的大写组件名称。例如,名为 foo 的组件现在希望组件特定变量为 CPACK_RPM_FOO_PACKAGE_NAME,而之前它希望是 CPACK_RPM_foo_PACKAGE_NAME。变量中的大写组件名称部分与用于其他 CPack 变量的惯例保持一致。为了向后兼容,旧格式的变量仍然有效,并且如果设置了变量的两个版本,则首选旧格式,但首选将来使用变量中的大写组件名称。以后的版本中将添加到 CPackRPM 的新变量将只支持大写组件变量格式。

  • CPack NSIS 生成器的配置文件模板已修复,用于引用由 CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL 选项使用的卸载工具的路径。这避免了依赖不安全的 Windows 功能来使用路径中带空格的卸载工具。