CMake 3.9 发布说明

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

新功能

语言

生成器

  • Visual Studio 生成器(适用于 VS 2010 及更高版本)学会了在安装 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> 定义它,以便在模块通过输出字符串使用程序包类型时,用指定的字符串替换类型名称。

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

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

  • The FindProtobuf 模块的 protobuf_generate_cpp() 命令新增了一个 EXPORT_MACRO 选项,用于指定 DLL 导出标记宏的名称。

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

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

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

CTest

  • The ctest_submit() 命令新增了一个 HTTPHEADER 选项,用于指定在提交过程中发送的自定义标头。

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

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

CPack

其他

已弃用和已删除的功能

  • 为策略 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 语句时,对相应头文件的搜索现在也会在目标的 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 文件不再启用 Hi-DPI 支持,就像它在 3.9.0 和 3.9.1 中所做的那样。必须撤消此更改,因为它破坏了 iOS 应用程序。

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