CMake 3.4 发行说明

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

新特性

生成器 (Generators)

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

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

命令 (Commands)

  • 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 子命令。

变量 (Variables)

属性 (Properties)

模块 (Modules)

  • 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 模块现在可以分别搜索 debug 和 release 变体。

  • FindwxWidgets 模块现在支持版本请求。

  • FindXercesC 模块现在可以分别搜索 debug 和 release 变体。

  • FindZLIB 模块现在可以分别搜索 debug 和 release 变体。

  • 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 选项,用于自定义作为 Dashboard Client 运行时提交的测试输出大小限制。

CPack

其他 (Other)

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

  • CMake 现在可以识别 MSVC 工具的 *.manifest 源文件。命名为 .exe.dll 目标源文件的 Manifest 文件将被合并到链接器生成的 Manifest 中,并嵌入到二进制文件中。

  • 现在支持 Concurrent Fortran 77 编译器。其 compiler idCCur

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

已弃用和移除的功能 (Deprecated and Removed Features)

  • CMakeExpandImportedTargets 模块现在已被文档化为已弃用。请参阅模块文档以了解详细说明。

  • CMAKE_USE_RELATIVE_PATHS 变量不再有任何效果。以前它部分实现且不可靠。

其他更改 (Other Changes)

  • CheckFunctionExists、CheckLibraryExistsCheckSymbolExists 和 FindThreads 模块现在可以在仅启用 CXX 的环境中工作。

  • CPack DEB Generator 现在在计算包校验和时正确排除了符号链接。

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

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

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

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

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