CMake 3.9 发行说明

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

新功能

语言

  • VS 2010 及更高版本的 Visual Studio Generators 现在支持 CUDA。这补充了 Makefile Generators 和 Ninja 生成器的现有支持。由于早期版本的 VS 集成中存在已知错误,建议使用 CUDA 8.0.61 或更高版本。

  • CMake 现在知道:prop_tgt:C++ 标准 <CXX_STANDARD> 和:prop_tgt:C 标准 <C_STANDARD> 及其相关的元特性,用于以下 编译器 IDCrayPGIXL

生成器

  • Visual Studio 生成器 for VS 2010 and above learned to support the ASM_NASM language when nasm is installed.

  • Xcode 生成器学会了创建 Xcode 模式文件。这是一项实验性功能,可以通过将 CMAKE_XCODE_GENERATE_SCHEME 变量设置为 TRUE 值来激活。

命令

变量

特性

模块

  • 添加了 CheckIPOsupported 模块以帮助项目检查当前工具链和 CMake 版本是否支持过程间优化 (IPO)。

  • CMakeFindDependencyMacro 模块 find_dependency 宏现在将所有参数转发给底层的 find_package() 调用。现有用途将继续像以前一样运行,但调用者现在可以访问 find_package() 接受的全套参数。

  • FeatureSummary 模块 feature_summary() 命令现在接受新的 DEFAULT_DESCRIPTION 选项,该选项将打印所选包类型的默认标题。

  • FeatureSummary 模块获得了一个新的 FeatureSummary_<TYPE>_DESCRIPTION 变量,可以为每个 <TYPE> 定义该变量,以便在使用包类型时用指定的字符串替换类型名称在模块的输出字符串中。

  • FindDoxygen 模块学会了使用 CMake 变量控制 Doxygen 行为,并通过新添加的 doxygen_add_docs 函数生成文档。 Doxygen 输入文件 (Doxyfile) 是自动生成的,doxygen 作为自定义目标的一部分运行。可以指定其他组件以查找可选工具:dotmscgendia

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

  • FindProtobuf 模块 protobuf_generate_cpp() 命令获得了一个 EXPORT_MACRO 选项来指定 DLL 导出标记宏的名称。

  • FindProtobuf 模块现在支持通过新的“Protobuf_USE_STATIC_LIBS”输入变量使用 Unix 静态库。

  • FindProtobuf 模块现在在找到库时提供导入的目标。

  • 添加了一个新的 GoogleTest 模块以提供独立于 FindGTest 模块的:command:gtest_add_tests 函数。该函数也被更新以支持关键字参数,功能扩展到允许指定测试名称前缀和后缀,对源文件的依赖是可选的,并将发现的测试用例列表返回给调用者。

C测试

  • ctest_submit() 命令获得了一个 HTTPHEADER 选项来指定在提交期间发送的自定义标头。

  • ctest(1) 可执行文件获得了新选项,允许开发人员禁用自动将测试添加到测试集以满足夹具依赖性。 -FS 防止为匹配提供的正则表达式的夹具添加设置测试,-FC 防止为匹配的夹具添加清理测试,-FA 防止为匹配的夹具添加任何测试。

  • 添加了 DISABLED 测试属性以标记已配置但显式禁用的测试,因此它们不会运行。

包装

其他

弃用和删除的功能

  • 为策略“CMP0036”及以下添加了明确的弃用诊断。 cmake-policies(7) 手册解释说,所有策略的旧行为都已弃用,项目应始终尽快移植到新行为。

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

  • Visual Studio 7 .NET 2003 生成器已被删除。

  • Xcode 生成器不再支持早于 3 的 Xcode 版本。

  • FindDoxygen 模块弃用了几个变量。

  • 由于上游 curl 7.52 的更改,与 CMake 捆绑在一起的 curl 版本在 Windows 上不再接受 file://c:/... 形式的 URL。使用形式 file:///c:/... 而不是在所有版本上工作。

其他变化

  • 使用 AUTOMOC 时,CMake 现在会扫描 ``Q_PLUGIN_METADATA` 宏的存在,并在来自宏的 FILE 参数的文件发生更改时重新运行 moc。

  • AUTOMOC 检测到形式为``#include "moc_<basename>.cpp"`` 的包含语句时,搜索相应的头文件现在也会在目标的 INCLUDE_DIRECTORIES 中查找.

  • 在运行测试时,CTest 学会了将跳过的测试(使用 SKIP_RETURN_CODE 属性)处理为与使用新的 DISABLED 属性的测试相同。由于此更改,当所有测试都被跳过或通过时,CTest 将不会指示失败。

  • Ninja 生成器放宽了对象编译的依赖性。对象编译现在仅依赖于与对象目标所依赖的库关联的自定义目标和自定义命令,不再依赖于库本身。依赖目标中的源文件现在可以编译而无需等待其目标的依赖项链接。

  • 在 macOS 上,RPATH 设置,例如 BUILD_WITH_INSTALL_RPATH 不再影响 install_name 字段。请参阅政策:policy:CMP0068

  • Visual Studio 14 2015 生成器已了解 VS 2015 更新对 v140 工具集的更改。 VS 更改了它理解的生成“-DEBUG”链接器标志变体的“GenerateDebugInformation”链接器设置的值集。

更新

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

3.9.1

  • CMake 3.9.0 添加的 find_ 命令 PACKAGE_ROOT 搜索路径组已从 3.9 系列中删除,这是由于新使用 <PackageName>_ROOT 变量导致的回归。将来可能会以更兼容的方式重新引入该行为。

3.9.2

  • 在 macOS 上,默认应用程序捆绑包“Info.plist”文件不再像在 3.9.0 和 3.9.1 中那样启用 Hi-DPI 支持。必须恢复更改,因为它破坏了 iOS 应用程序。

  • Xcode 生成器不再像在 3.9.0 和 3.9.1 中那样将“outputPaths”添加到自定义脚本构建阶段。这是为了支持 Xcode 9 的新构建系统而添加的,但破坏了新旧 Xcode 构建系统的增量重建。