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() 命令定义时,该操作符求值为真。请参阅策略 CMP0064

  • install(DIRECTORY) 命令的 DESTINATION 选项现在支持 生成器表达式

  • install(FILES) 命令的 DESTINATION 选项现在支持 生成器表达式

  • string() 命令新增了 APPEND 子命令。

变量 (Variables)

属性 (Properties)

模块 (Modules)

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

  • 外部项目模块新增了 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 选项,用于自定义作为 仪表盘客户端 运行时提交的测试输出大小限制。

CPack

其他 (Other)

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

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

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

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

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

  • CMakeExpandImportedTargets 模块现在已文档化为已弃用。请参阅模块文档了解解释。

  • 变量 CMAKE_USE_RELATIVE_PATHS 不再有任何影响。之前它曾部分实现且不可靠。

其他更改 (Other Changes)

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

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

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

  • CPack 模块不再对用作其他设置默认值的设置进行 CMake 特殊字符的转义。负责此操作的宏 cpack_set_if_not_set 已被弃用。

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

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

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