CMake 3.6 发行说明

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

新功能

生成器

  • Ninja 生成器学会了生成 sub/dir/all 形式的虚假目标来驱动子目录的构建。这相当于``cd sub/dir;使用 Makefile 生成器 制作所有``。

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

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

命令

变量

特性

模块

  • CMakePushCheckState 模块现在推送/弹出/重置变量 CMAKE_EXTRA_INCLUDE_FILECheckTypeSize 中使用。

  • 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 通用 CRT 库的应用程序本地部署。

平台

  • CYGWIN 现在支持 Clang 编译器。

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

C测试

包装

其他

  • Compile Features 功能现在可以识别 UNIX 平台上英特尔 C++ 编译器版本 12.1 到 16.0 支持的功能。

弃用和删除的功能

  • CMakeForceCompiler 模块及其宏现已弃用。有关解释,请参阅模块文档。

  • find_library()find_path()find_file() 命令不再在非 Windows 平台上搜索源自 PATH 环境变量的安装前缀。此行为已添加到 CMake 3.3 中以支持 Windows 主机,但已证明在 UNIX 主机上存在问题。在 PATH 中保留一些``<prefix>/bin`` 目录只是为了他们的工具的用户不一定希望搜索任何支持的``<prefix>/lib`` 目录。可以使用要搜索的前缀的 :ref: 分号分隔列表 <CMake Language Lists> 来设置 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,现在默认使用它。这使 SSL/TLS 支持通过 https 支持网络通信的命令,例如 文件(下载)()文件(上传)()ctest_submit()

  • 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 功能来运行路径中带有空格的卸载程序工具。