CMake 3.7 发布说明

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

新特性

平台

  • CMake 现在支持使用简单的工具链文件进行 交叉编译到 Android

  • Clang 编译器现在在 AIX 上受支持。

生成器

  • Ninja 生成器学会了在使用具有必要功能的 ninja 工具时有条件地支持 Fortran。有关详细信息,请参阅生成器文档。

  • Ninja 生成器学会了生成 sub/dir/{test,install,package} 形式的伪目标来驱动子目录安装、测试或打包目标的构建。这等效于使用 Makefile 生成器cd sub/dir; make {test,install,package}

  • Visual Studio 15 2017 生成器已添加。这是实验性的,基于“Visual Studio 2017 RC”,因为此版本的 VS 尚未发布。

  • Visual Studio 生成器(针对 VS 2010 及更高版本)学会了将 .natvis 源文件正确地放入 VS 项目文件中。

  • Xcode 生成器的基础 Swift 语言支持学会了遵循新的 CMAKE_Swift_LANGUAGE_VERSION 变量来告诉 Xcode 源代码使用哪个版本的 Swift。

  • CodeLite 生成器获得了一个新的 CMAKE_CODELITE_USE_TARGETS 选项,用于将项目创建从项目更改为目标。

命令

  • add_custom_command() 命令获得了一个新的 DEPFILE 选项,该选项与 Ninja 生成器一起使用,为构建工具提供隐式依赖信息。

  • cmake_parse_arguments() 命令获得了一个新的 PARSE_ARGV 模式,用于直接从 ARGCARGV# 变量读取参数,这些变量位于 function() 函数体内部。

  • export() 命令获得了一个 ANDROID_MK 选项,用于生成引用 CMake 构建库作为预构建库的 Android.mk 文件,供 Android NDK 构建系统使用。

  • file(DOWNLOAD)file(UPLOAD) 命令获得了 HTTPHEADER <HTTP-header>USERPWD <username>:<password> 选项。

  • find_library()find_package() 命令学会了在构建目标为 32 位架构时搜索 lib32/ 目录。请参阅 FIND_LIBRARY_USE_LIB32_PATHS 全局属性。

  • find_package() 命令获得了通过 NAME 或通过 NATURAL 对兼容库进行排序的可能性,方法是设置两个新变量 CMAKE_FIND_PACKAGE_SORT_ORDERCMAKE_FIND_PACKAGE_SORT_DIRECTION

  • if() 命令获得了新的布尔比较操作 LESS_EQUALGREATER_EQUALSTRLESS_EQUALSTRGREATER_EQUALVERSION_LESS_EQUALVERSION_GREATER_EQUAL

  • install() 命令获得了一个 EXPORT_ANDROID_MK 子命令,用于安装引用已安装库作为预构建库的 Android.mk 文件,供 Android NDK 构建系统使用。

  • string(TIMESTAMP)file(TIMESTAMP) 命令获得了对 %a%b 占位符的支持。这些是缩写的星期几和月份名称。

  • 现在,try_compile() 命令的源文件签名会尊重特定配置的标志(例如 CMAKE_<LANG>_FLAGS_DEBUG)在生成的测试项目中。之前,仅使用当前工具链的默认标志。请参阅策略 CMP0066

变量

属性

模块

  • 添加了 AndroidTestUtilities 模块,用于管理测试数据到 Android 设备的传输。

  • 模块宏 CHECK_Fortran_SOURCE_COMPILES CheckFortranSourceCompiles 获得了一个 SRC_EXT 选项,用于指定自定义测试 Fortran 源文件扩展名。

  • 模块 ExternalProject 获得了 HTTP_USERNAMEHTTP_PASSWORD 选项,用于设置 http 下载凭据。

  • 模块 ExternalProject 获得了一个 HTTP_HEADER 选项,用于添加 http 下载头。

  • 模块 FindBISONBISON_TARGET 宏学习了一个新的 REPORT_FILE 选项,用于指定 bison 的 --report-file= 选项。

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

  • 引入了 FindICU 模块,用于查找 Unicode 国际组件 (ICU) 库和程序。

  • 模块 FindMatlab 学习了如何查找 SIMULINK 和 MAT 组件。

  • The FindMatlab 模块 matlab_add_mex() 命令学会了添加可执行文件和模块。

  • The FindMatlab 模块 matlab_add_unit_test() 命令学会了支持内联 Matlab 测试代码。

  • The FindOpenCL 模块现在提供了导入的目标。

  • The FindOpenMP 模块学会了从编译器检测 OpenMP 版本(规范日期)。

  • 添加了一个 FindVulkan 模块。

  • The GenerateExportHeader 模块学习了一个新的 CUSTOM_CONTENT_FROM_VARIABLE 选项,用于指定包含自定义内容的变量,以便将其包含在生成的头部文件中。

  • The GNUInstallDirs 模块获得了一个新的 GNUInstallDirs_get_absolute_install_dir() 命令。

  • The UseJava 模块获得了用于“导出”jar目标以供外部 CMake 项目使用的 API。请参阅 install_jar_exportsexport_jars 函数。

CTest

CPack

其他

  • cmake(1) 获得了一个 -E capabilities 选项,用于提供 CMake 工具功能(可用生成器等)的机器可读(JSON)描述。

  • 添加了一种新的 cmake-server(7) 模式,通过 JSON 协议向客户端提供有关 CMake 生成的构建系统的信息。目前所有协议均为实验性,可能会发生变化。

  • The cmake(1) 命令学习了一个 --trace-source=<file> 选项。

  • ccmake(1) 学习了支持类似 vim 的导航绑定。

  • cmake-gui(1) 获得了一个按钮,用于打开为 Visual Studio 生成器Xcode 生成器生成的项目文件。

已弃用和移除的功能

  • 我们不再从 cmake.org 为新版本的 CMake 下载 Linux i386 二进制文件。

  • Vim 支持文件 cmake-indent.vimcmake-syntax.vimcmake-help.vim 已被移除,取而代之的是现在从 vim-cmake-syntax 项目提供的文件。

  • 放弃了使用某些编译器构建 CMake 本身。

    • Visual Studio 7.1 和 2005——由 VS 2008 及更高版本取代

    • MinGW.org mingw32——由 MSYS2 mingw32 和 mingw64 取代

    CMake 仍然支持使用这些编译器为其他项目生成构建系统。

其他更改

  • Fortran 依赖项扫描程序学习了支持 Fortran 子模块 的语法。

  • 现在,CMake 与 vim-cmake-syntax 项目的 indent/cmake.vimsyntax/cmake.vim Vim 支持文件一起分发。