CMake 3.6 Release Notes

自 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 模块现在在从 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 编译器。

  • 添加了对 Bruce C 编译器的支持,编译器 ID 为 Bruce

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 进行网络通信的命令启用了 SSL/TLS 支持,例如 file(DOWNLOAD)file(UPLOAD)ctest_submit()

  • cmake(1) 命令行工具现在会拒绝使用多个 --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 功能来运行路径中带有空格的卸载工具。