CMake 3.9 发行说明

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

新特性

语言

构建生成器

  • 适用于 VS 2010 及更高版本的 Visual Studio 生成器 学习了在安装 nasm 时支持 ASM_NASM 语言。

  • Xcode 生成器学习了创建 Xcode schema 文件。这是一个实验性功能,可以通过将 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 模块提供 gtest_add_tests() 函数。该函数也已更新为支持关键字参数,功能已扩展为允许指定测试名称前缀和后缀,使对源文件的依赖成为可选,并将发现的测试用例列表返回给调用者。

CTest

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

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

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

CPack

其他

已弃用和移除的功能

  • 为策略 CMP0036 及更低版本添加了显式的弃用诊断。cmake-policies(7) 手册解释说,所有策略的 OLD 行为都已弃用,项目应始终尽快移植到 NEW 行为。

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

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

  • Xcode 生成器已停止支持低于 3 的 Xcode 版本。

  • FindDoxygen 模块已弃用多个变量。

  • 由于上游 curl 7.52 中的更改,CMake 捆绑的 curl 版本不再接受 file://c:/... 形式的 URL(在 Windows 上)。请改用 file:///c:/... 形式,以便在所有版本上工作。

其他更改

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

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

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

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

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

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

更新

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

3.9.1

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

3.9.2

  • 在 macOS 上,默认应用程序 bundle Info.plist 文件不再像 3.9.0 和 3.9.1 中那样启用 Hi-DPI 支持。此更改必须被还原,因为它破坏了 iOS 应用程序。

  • Xcode 生成器不再像 3.9.0 和 3.9.1 中那样向自定义脚本构建阶段添加 "outputPaths"。添加此功能是为了尝试支持 Xcode 9 的新构建系统,但破坏了旧的和新的 Xcode 构建系统的增量重建。