CMake 3.9 发行说明

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

新功能

语言

生成器

  • 对于 VS 2010 及以上版本的 Visual Studio 生成器,当安装了 nasm 时,可以支持 ASM_NASM 语言。

  • 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 模块,用于提供 gtest_add_tests() 函数,该函数独立于 FindGTest 模块。该函数还更新以支持关键字参数,功能已扩展,允许指定测试名称前缀和后缀,使对源文件的依赖成为可选,并将发现的测试用例列表返回给调用者。

CTest

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

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

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

CPack

其他

已弃用和移除的功能

  • 为策略 CMP0036 及以下添加了明确的弃用诊断。 cmake-policies(7) 手册解释了所有策略的 OLD 行为已被弃用,项目应尽快移植到 NEW 行为。

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

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

  • Xcode 生成器已停止对 Xcode 3 以下版本的支持。

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

  • CMake 捆绑的 curl 版本不再接受 Windows 上的 file://c:/... 形式的 URL,因为上游 curl 7.52 进行了更改。请改用 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

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

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 构建系统的增量重建。