CMake 3.4 发行说明

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

新功能

生成器

  • Visual Studio 14 2015 生成器学会了根据 CMAKE_SYSTEM_VERSION 变量的值和主机上可用的 SDK 选择 Windows 10 SDK。

  • CMake 学会了对 Apple Swift 语言的基本支持。在 Xcode 6.1 或更高版本中使用 Xcode 生成器时,可以使用 enable_language() 命令或 project() 命令启用 Swift 语言(这是一个错误其他生成器或 Xcode 太旧时)。然后可以在编译目标中列出 .swift 源文件。

命令

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

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

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

  • install(DIRECTORY) 命令 DESTINATION 选项学会了支持 generator expressions

  • install(FILES) 命令 DESTINATION 选项学会了支持 generator expressions

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

变量

特性

模块

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

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

  • FindBISON 模块 BISON_TARGET 宏学习了一个新的 DEFINES_FILE 选项来指定要生成的自定义输出标头。

  • FindHDF5 模块学习了一个新的 HDF5_PREFER_PARALLEL 选项,允许用户指定首选并行 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 头文件。

生成器表达式

  • 添加了一个新的``$<SHELL_PATH:...>``:manual:generator expression <cmake-generator-expressions(7)>

C测试

  • 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 来自定义运行时提交的测试输出大小的限制一个 仪表板客户端

包装

其他

  • Compile Features 功能现在可以识别 Windows 上 GNU C 编译器支持的功能。

  • CMake 学会了使用 MSVC 工具来尊重 *.manifest 源文件。命名为“.exe”和“.dll”目标源的清单文件将与链接器生成的清单合并并嵌入到二进制文件中。

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

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

弃用和删除的功能

其他变化

  • CheckFunctionExists、CheckLibraryExists、CheckSymbolExists 和 FindThreads 模块学会了在仅启用 CXX 的环境中工作。

  • CPack DEB Generator 现在可以在包校验和计算期间正确排除符号链接。

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

  • CPack 模块在用作其他设置的默认值时不再使用 CMake 特殊字符破坏设置。负责此操作的宏“cpack_set_if_not_set”现已弃用。

  • 除非设置了 ENABLE_EXPORTS 目标属性,否则 CMake 不再链接带有标志的可执行文件以导出符号。请参阅政策:policy:CMP0065

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

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