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”选项。此功能是实验性的。
命令¶
add_custom_command()和add_custom_target()命令学习了如何使用CROSSCOMPILING_EMULATOR可执行目标属性。install()命令学习了一个新的EXCLUDE_FROM_ALL选项,将安装规则排除在默认安装之外。list()命令获得了一个FILTER子命令以通过正则表达式过滤列表元素。string(TIMESTAMP)和file(TIMESTAMP)命令获得了对 %s` 占位符的支持。这是自 UNIX 纪元以来的秒数。
变量¶
引入了一个
CMAKE_DEPENDS_IN_PROJECT_ONLY变量来告诉 Makefile 生成器 将依赖项扫描限制在项目源代码和构建树中的文件。引入了一个新的
CMAKE_HOST_SOLARIS变量来指示 CMake 何时在 Oracle Solaris 主机上运行。添加了一个
CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES变量供工具链文件使用,以指定要附加到所有编译器命令行的系统包含目录。CMAKE_<LANG>_STANDARD_LIBRARIES变量现已记录在案。它旨在供工具链文件使用,以指定要添加到所有链接器命令行的系统库。一个
CMAKE_NINJA_OUTPUT_PATH_PREFIX变量被引入来告诉Ninja生成器配置生成的build.ninja文件以用作subninja。添加了
CMAKE_TRY_COMPILE_PLATFORM_VARIABLES变量供工具链文件使用,以指定特定于平台的变量,这些变量必须通过try_compile()命令传播到测试项目中。添加了
CMAKE_TRY_COMPILE_TARGET_TYPE变量,以选择性地告诉try_compile()命令构建静态库而不是可执行文件。这对于无法在没有自定义标志或脚本的情况下链接二进制文件的交叉编译工具链很有用。
特性¶
DEPLOYMENT_REMOTE_DIRECTORY目标属性被引入来告诉Visual Studio 9 2008和Visual Studio 8 2005生成器为 WinCE 项目部署和调试器设置生成“远程目录”。<LANG>_CLANG_TIDY目标属性和支持CMAKE_<LANG>_CLANG_TIDY变量被引入来告诉 Makefile 生成器 和Ninja生成器运行 `` clang-tidy`` 以及用于C和CXX语言的编译器。引入了
TIMEOUT_AFTER_MATCH测试属性,以选择性地告诉 CTest 在匹配测试的某些输出后强制执行辅助超时。VS_CONFIGURATION_TYPE目标属性被引入来为支持 VS 2010 及更高版本的 :ref:`Visual Studio Generators 指定自定义项目文件类型。VS_STARTUP_PROJECT目录属性被引入以指定 Visual Studio 生成器 生成的解决方案(.sln文件)的默认启动项目。
模块¶
CMakePushCheckState模块现在推送/弹出/重置变量CMAKE_EXTRA_INCLUDE_FILE在CheckTypeSize中使用。ExternalProject模块学习了GIT_SHALLOW 1选项来执行 Git 存储库的浅克隆。ExternalProject模块学会了递归地初始化 Git 子模块,并在更新时初始化新的子模块。使用GIT_SUBMODULES选项来限制哪些子模块被初始化和更新。ExternalProject模块学习了DOWNLOAD_NO_EXTRACT 1参数以跳过解压下载的文件(例如,对于自解压 shell 安装程序或.msi文件)。ExternalProject模块现在在从 git 存储库中获取数据时使用TLS_VERIFY。FindBLAS和FindLAPACK模块学会了支持 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测试¶
ctest_update()命令现在查看CTEST_GIT_INIT_SUBMODULES变量以确定在更新之前是否应该更新子模块。ctest_update()命令现在将在更新时同步子模块。添加子模块或更改子模块 URL 的更新现在将被正确提取。
包装¶
CPack DEB Generator学会了如何在 CMAKE_INSTALL_RPATH` 中处理$ORIGIN当 CPACK_DEBIAN_PACKAGE_SHLIBDEPS 用于依赖自动检测时。CPack DEB Generator学习了当包包含共享库时如何生成DEBIAN/shlibs控制文件。CPack DEB Generator学会了如何生成DEBIAN/postinst和DEBIAN/postrm文件,前提是软件包将库安装在 ldconfig 控制的位置(例如/lib/、` /usr/lib/`)。CPack DEB Generator学习了如果使用多组件设置并设置了CPACK_COMPONENT_<compName>_DEPENDS变量,如何在 Debian 包之间生成依赖关系。为了向后兼容,默认情况下禁用此功能。请参阅CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS。CPack DEB Generator学习了如何设置自定义包文件名,包括如何生成正确命名的 Debian 包<PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
为了向后兼容,默认情况下禁用此功能。请参阅
CPACK_DEBIAN_FILE_NAME和CPACK_DEBIAN_<COMPONENT>_FILE_NAME。CPack DEB Generator学习了如何设置包版本号(包文件名中的DebianRevisionNumber与CPACK_DEBIAN_FILE_NAME设置的DEB-DEFAULT值结合使用)。请参阅CPACK_DEBIAN_PACKAGE_RELEASE。CPack DEB Generator学习了如何为每个组件设置包架构。请参阅CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE。CPack DragNDrop Generator学习了一个新选项来跳过/Applications符号链接。请参阅CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK变量。CPackIFW模块获得了一个新的cpack_ifw_update_repository()命令来从远程存储库更新特定于 QtIFW 的存储库。CPack RPM Generator学习了如何在启用时将 RPMdist标签设置为 RPMRelease:标签的一部分(在某些 Linux 发行版上是强制性的,例如在 Fedora 上)。请参阅CPACK_RPM_PACKAGE_RELEASE_DIST。CPack RPM Generator学习了如何为拥有包内容的用户/组和文件/目录权限设置默认值。请参阅CPACK_RPM_DEFAULT_USER、CPACK_RPM_DEFAULT_GROUP、CPACK_RPM_DEFAULT_FILE_PERMISSIONS、CPACK_RPM_DEFAULT_DIR_PERMISSIONS及其每个组件对应项。CPack RPM Generator学习了如何设置用户定义的包文件名,如何指定 rpmbuild 应该决定文件名格式以及处理由单个用户定义的规范文件生成的多个 rpm 包。请参阅CPACK_RPM_PACKAGE_NAME和CPACK_RPM_<component>_PACKAGE_NAME。CPack RPM Generator学会了如何正确处理指向生成包外部的符号链接。
其他¶
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 功能来运行路径中带有空格的卸载程序工具。