CMake 3.3 发行说明

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

新功能

生成器

  • Makefile 生成器 现在将 .DELETE_ON_ERROR 添加到包含磁盘文件实际构建规则的 makefile 中。这告诉 GNU make 在他们的配方修改输出但失败时删除规则输出。

  • Visual Studio 生成器 学会了支持 .xaml 源文件并自动将它们与相应的 .h.cpp 源相关联。

  • 在 Windows 上添加了一个新的实验性 Green Hills MULTI 生成器。 Green Hills MULTI 是用于嵌入式实时系统的 IDE。

命令

变量

特性

模块

  • CheckFortranCompilerFlag 模块被引入来检查``Fortran`` 编译器标志,就像 CheckCCompilerFlag 模块已经为 C 做的一样。

  • ExternalData 模块学习了一个新的 ExternalData_NO_SYMLINKS 选项来禁止使用符号链接来填充真实数据文件,而是使用副本。

  • ExternalData 模块在指定目录的 DATA{} 引用中学习了一个新的 RECURSE: 选项。这允许匹配关联文件的整个目录树。

  • ExternalData 模块学习了一个新的 URL 模板占位符 %(algo:<key>) 以允许通过配置新的 :variable:`ExternalData_URL_ALGO_<algo>_< 从算法名称到 URL 组件的自定义映射键>`变量。这允许远程 URL 具有更大的灵活性。

  • ExternalProject 模块学会了在每个步骤的 BYPRODUCTS 中替换诸如 <BINARY_DIR> 的标记。

  • ExternalProject 模块 API 学会了在使用 LOG_* 选项和 CMake 初始缓存选项时支持 generator expressions

  • FindBoost 模块现在跟踪包含库的目录,分别用于 RELEASE 和 DEBUG 配置。

  • FindCUDA 模块现在默认使用静态 CUDA 运行时库(如果可用)。提供了一个新的 CUDA_USE_STATIC_CUDA_RUNTIME 选项来控制此行为。

  • FindMatlab 模块被完全重写。它了解版本和组件,并以更精确和多平台的方式找到 Matlab。该模块现在提供 API 来创建 mex 扩展、文档和单元测试。

  • FindPackageHandleStandardArgs 模块 FIND_PACKAGE_HANDLE_STANDARD_ARGS 函数现在始终填充 <PackageName>_FOUND<UPPERCASE_NAME>_FOUND 变量(后者用于向后兼容)。 FOUND_VAR 选项现在被忽略,除非强制执行其允许的值。

  • InstallRequiredSystemLibraries 模块学习了一个新的 CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT 选项来指定安装组件。

生成器表达式

  • 引入了一个新的 COMPILE_LANGUAGE 生成器表达式,以允许根据每个源文件的 LANGUAGE 指定目标文件的编译选项。由于底层本机构建工具的限制,此功能在生成器之间具有不同的支持。有关详细信息,请参阅 cmake-generator-expressions(7) 手册。

C测试

包装

其他

  • Compile Features 功能现在可以识别 Windows 4.4 到 5.0 版 GNU 编译器支持的功能。

  • cmake(1) -E tar 命令学习了一个新的 --format<format> 选项来指定要写入的存档格式。

  • 在 OS X 上,CMake 学会了创建 XCTest 包来测试 Xcode 中的框架和应用程序包。 FindXCTest 模块提供了方便的函数来处理 XCTEST 包。

弃用和删除的功能

  • 在 OS X 上, cmake-gui(1) 不再有 Install For Command Line Use 菜单项。相反,有一个“如何为命令行使用安装”菜单项,它显示一个信息对话框,解释如何使命令行工具可用。例如::

    /Applications/CMake.app/Contents/bin/cmake-gui --install
    
  • ctest_build()build_command() 命令不再告诉 make 工具使用 -i 选项忽略错误。以前这是为 Makefile 生成器 而不是其他人完成的。请参阅政策:policy:CMP0061

  • Visual Studio 10 2010 生成器不再在项目打开时检查正在运行的 VS IDE 或要求它们重新加载。这最初是为 VS 10 完成的,因为它已经为 VS 7 到 9 完成,以避免提示解决方案中的每个项目。由于 VS >= 10 允许立即重新加载整个解决方案,因此他们不需要 CMake 来帮助他们。

  • Visual Studio 7 生成器 (.NET 2002) 现已弃用,并将在未来版本的 CMake 中删除。

  • Visual Studio 6 生成器现已弃用,并将在未来版本的 CMake 中删除。

  • find_package() 命令不再考虑最近在 cmake-gui(1) 中配置的项目构建树。这以前只在 Windows 上完成,现在从未完成。 NO_CMAKE_BUILDS_PATH 选项现在被忽略,如果给出并且有效地始终打开。项目可能会填充 用户包注册表 以帮助用户一个接一个地构建多个依赖项目。

  • add_definitions() 命令不再导致 DEFINITIONS 目录属性被填充。请参阅政策:policy:CMP0059

  • 使用 Visual Studio 7、8 和 9 生成器,$(OutDir) 占位符的值不再计算为配置名称。项目应该使用 $(ConfigurationName) 来代替。

  • 不再允许将 export() 的输出与 install(FILES) 命令一起使用。有关详细信息,请参阅政策:policy:CMP0062

其他变化

  • Ninja 生成器现在要求调用 add_custom_command()add_custom_target() 命令使用 BYPRODUCTS 选项来显式指定由未列出的自定义命令生成的任何文件作为输出(可能是因为允许它们的时间戳早于输入)。请参阅政策:policy:CMP0058

  • Makefile 生成器 的构建时进度输出已得到改进。它不再在并行构建期间混合进度和构建规则消息。链接规则消息现在有进展并显示为粗体绿色而不是粗体红色(因为红色通常与错误消息相关联)。

  • Visual Studio 7、8 和 9 的 CMAKE_CFG_INTDIR 变量值现在是 $(ConfigurationName) 而不是 $(OutDir)。这对变量的预期用例应该没有影响。

  • 通过隐式链接器搜索目录(例如``/usr/lib/libfoo.a``)中的完整路径链接到库文件不再要求链接器搜索库(例如``-lfoo``),现在按完整路径链接。请参阅政策:policy:CMP0060