CMake 3.6 版本说明

自 CMake 3.5 起的更改包括以下内容。

新特性

生成器 (Generators)

  • Ninja 生成器学会了生成 sub/dir/all 形式的虚假目标,以驱动子目录的构建。这等同于使用 Makefile 生成器 时执行 cd sub/dir; make all

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

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

命令 (Commands)

变量 (Variables)

属性 (Properties)

模块 (Modules)

  • CMakePushCheckState 模块现在会推送/弹出/重置在 CheckTypeSize 中使用的 CMAKE_EXTRA_INCLUDE_FILES 变量。

  • ExternalProject 模块学会了 GIT_SHALLOW 1 选项,以执行 Git 存储库的浅层克隆。

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

  • ExternalProject 模块学会了 DOWNLOAD_NO_EXTRACT 1 参数,以跳过解压下载的文件(例如,用于自解压 shell 安装程序或 .msi 文件)。

  • ExternalProject 模块现在在从 git 存储库获取时使用 TLS_VERIFY

  • 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 编译器。

  • 添加了对 Bruce C 编译器(编译器 ID 为 Bruce)的支持。

CTest

CPack

其他 (Other)

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

已弃用和移除的功能 (Deprecated and Removed Features)

  • 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 起已弃用。

其他更改 (Other Changes)

  • 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() 调用来支持特殊字符。这可能会破坏手动添加转义以解决此 bug 的客户端。

  • FindFLEX 模块的 flex_target() 命令现在通过将 VERBATIM 选项传递给内部的 add_custom_command() 调用来支持特殊字符。这可能会破坏手动添加转义以解决此 bug 的客户端。

  • FindProtobuf 模块的输入和输出变量均已从 PROTOBUF_ 重命名为 Protobuf_,以与其他查找模块保持一致。如果提供了旧格式的输入变量,仍将予以支持,并且始终会提供旧格式的输出变量。

  • CPack RPM Generator 现在支持 CPackRPM 特定的每个组件变量中的大写组件名称。例如,名为 foo 的组件现在期望组件特定的变量为 CPACK_RPM_FOO_PACKAGE_NAME,而以前期望的是 CPACK_RPM_foo_PACKAGE_NAME。变量中大写组件名称部分与其他 CPack 变量使用的约定兼容。为了向后兼容,旧格式的变量仍然有效,并且在同时设置两种变量时首选,但将来首选使用大写组件名称的变量。将在后续 CMake 版本中添加到 CPackRPM 的新变量将仅支持大写组件变量格式。

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