CMake 3.4 发行说明

自 CMake 3.3 以来的更改包括以下内容。

新特性

生成器

  • Visual Studio 14 2015 生成器学习了基于 CMAKE_SYSTEM_VERSION 变量的值和主机上可用的 SDK 来选择 Windows 10 SDK。

  • CMake 学习了对 Apple Swift 语言的基本支持。当将 Xcode 生成器与 Xcode 6.1 或更高版本一起使用时,可以使用 Swift 语言通过 enable_language() 命令或 project() 命令启用(与其他生成器或 Xcode 版本过旧时会报错)。然后,可以在目标中列出 .swift 源文件以进行编译。

命令

  • find_program() 命令学习了一个 NAMES_PER_DIR 选项,用于在移动到下一个目录之前,在每个目录中考虑所有给定的 NAMES

  • get_filename_component() 命令学习了一个新的 BASE_DIR 子命令。这用于在从相对路径计算绝对路径时指定基本目录。

  • if() 命令学习了一个新的 TEST 运算符,如果给定的测试名称已由 add_test() 命令定义,则该运算符的求值结果为 true。请参阅策略 CMP0064

  • install(DIRECTORY) 命令的 DESTINATION 选项学习了支持 生成器表达式

  • install(FILES) 命令的 DESTINATION 选项学习了支持 生成器表达式

  • string() 命令学习了一个新的 APPEND 子命令。

变量

属性

模块

  • ExternalProject 模块的 ExternalProject_Add() 函数的 GIT_SUBMODULES 选项现在也限制了初始化的子模块集,除了先前限制更新的子模块集的行为之外。

  • ExternalProject 模块学习了新的 USES_TERMINAL 参数,用于为步骤提供独占终端访问权限。这与 Ninja 生成器一起使用时,可以监视 CMake 超级构建进度并防止 CPU 过度订阅。

  • FindBISON 模块的 BISON_TARGET 宏学习了一个新的 DEFINES_FILE 选项,用于指定要生成的自定义输出头文件。

  • FindHDF5 模块学习了一个新的 HDF5_PREFER_PARALLEL 选项,允许用户指定如果并行 HDF5 工具和非并行 HDF5 工具都可用,则首选并行 HDF5 工具。

  • FindIce 模块现在提供导入的目标。

  • FindJava 模块学习了可选地查找 idljjarsigner 工具。

  • FindOpenSSL 模块现在提供导入的目标。

  • FindOpenSSL 模块学习了一个新的 OPENSSL_USE_STATIC_LIBS 选项,仅搜索静态库。

  • FindPkgConfig 学习了一个新的 pkg_get_variable() 命令,该命令可用于查询包中的任意变量(例如,用于相关工具或数据和插件安装路径)。

  • FindProtobuf 模块获得了一个新的 protobuf_generate_python() 函数,用于从 .proto 文件生成 python 源代码。

  • FindTIFF 模块学习了分别搜索调试和发布变体。

  • FindwxWidgets 模块学习了支持版本请求。

  • FindXercesC 模块学习了分别搜索调试和发布变体。

  • FindZLIB 模块学习了分别搜索调试和发布变体。

  • GNUInstallDirs 模块根据 GNU 编码标准文件系统层次结构标准,学习了某些安装前缀的特殊默认值。

  • UseJava 模块的 add_jar 函数学习了支持用于源规范的响应文件(例如 @srcs.txt)。

  • UseJava 模块的 install_jar 函数学习了新的 DESTINATIONCOMPONENT 选项,以指定相应的 install() 命令选项。

  • UseJava 模块获得了一个新的 create_javah 函数,用于从 Java 类创建 C 头文件。

生成器表达式

CTest

  • CTest 学习了可选地测量并行测试期间的 CPU 负载,并避免启动可能导致负载超过给定阈值的测试。请参阅 ctest(1) 命令的 --test-load 选项、CTest 测试步骤TestLoad 设置、CTEST_TEST_LOAD 变量以及 ctest_test() 命令的 TEST_LOAD 选项。

  • ctest(1) 学习了选项 --test-output-size-passed--test-output-size-failed,以自定义作为 仪表板客户端 运行时提交的测试输出大小的限制。

CPack

其他

  • 编译特性 功能现在知道 Windows 上 GNU C 编译器支持的特性。

  • CMake 学习了使用 MSVC 工具处理 *.manifest 源文件。命名为 .exe.dll 目标的源文件的 Manifest 文件将与链接器生成的 manifest 合并并嵌入到二进制文件中。

  • 现在支持 Concurrent Fortran 77 编译器。它的 编译器 IDCCur

  • cmake(1) 获得了一个新的 --trace-expand 命令行选项,它类似于 --trace,但在输出中展开变量引用。

已弃用和移除的特性

其他更改

  • CheckFunctionExistsCheckLibraryExistsCheckSymbolExistsFindThreads 模块学习了在仅启用 CXX 的环境中工作。

  • CPack DEB 生成器 现在在包校验和计算期间正确地排除符号链接。

  • CPack DEB 生成器 不再使用 fakeroot 和系统 tar 程序进行打包。

  • CPack 模块不再混淆包含 CMake 特殊字符的设置,当这些设置用作其他设置的默认值时。负责此操作的宏 cpack_set_if_not_set 现在已弃用。

  • CMake 不再使用导出符号的标志链接可执行文件,除非设置了 ENABLE_EXPORTS 目标属性。请参阅策略 CMP0065

  • 不再为使用 add_library() 命令创建的 MODULE 库设置 SONAME 字段。MODULE 库旨在在运行时进行显式动态加载。它们无法链接,因此 SONAME 没有用处。

  • 内部 CMAKE_<LANG>_COMPILE_OBJECT 规则变量现在在单独的 <INCLUDES> 占位符中替换编译器包含标志,而不是在主要的 <FLAGS> 占位符中替换。