CMake 3.16 发行说明

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

新功能

语言

  • CMake 学会支持 Objective C (OBJC) 和 Objective C++ (OBJCXX) 语言。它们可以通过 project()enable_language() 命令启用。当启用 OBJCOBJCXX 时,分别具有 .m.mm 源文件将作为 Objective C 或 C++ 进行编译。否则,它们将像以前一样被视为普通 C++ 源文件。

编译器

  • 现在 Solaris 上支持 Clang 编译器。

平台

  • 在 AIX 上,使用 ENABLE_EXPORTS 目标属性的可执行文件现在除了可执行文件之外,还生成具有 .imp 扩展名的链接程序导入文件。插件(通过 add_library() 创建,并使用 MODULE 选项)使用 target_link_libraries() 链接可执行文件以获取其符号,现在使用导入文件进行链接。 install(TARGETS) 命令现在以 ARCHIVE 工件的形式安装导入文件。

  • 在 AIX 上,默认不再启用运行时链接。CMake 为链接器提供了足够的信息来预先解决所有符号。可以通过向其链接标记中添加 -Wl,-G 来手动启用共享库和/或可加载模块的运行时链接(例如在 CMAKE_SHARED_LINKER_FLAGSCMAKE_MODULE_LINKER_FLAGS 变量中)。可以通过向其链接标记中添加 -Wl,-brtl 来手动启用可执行文件的运行时链接(例如在 CMAKE_EXE_LINKER_FLAGS 变量中)。

命令行

  • cmake(1) -E 现在支持 truefalse 命令,它们不会执行任何操作,但会分别返回 0 和 1 的退出代码。

  • cmake(1) 添加了 --trace-redirect=<file> 命令行选项,可用于将 --trace 输出重定向到文件,而不是 stderr

  • 为使 cmake(1) --loglevel 命令行选项与其他命令行选项的命名保持一致,该选项已重命名为 --log-level。为保持向后兼容性,--loglevel 选项仍受支持。

命令

变量

属性

模块

Autogen

  • 使用 AUTOMOC 时,新的 CMAKE_AUTOMOC_PATH_PREFIX 变量或 AUTOMOC_PATH_PREFIX 目标属性可被启用为 -p 生成 moc 的路径前缀选项。这可确保 moc 输出文件在不同的构建设置中是相同的(给定由 moc 编译的头文件位于 include directory)。它还可确保当源目录和/或构建目录为符号链接时,moc 输出文件可正确编译。

CTest

CPack

已弃用和已删除的功能

其他更改

  • cmake(1) -C <initial-cache> 选项现在使用 CMAKE_SOURCE_DIR 和将 CMAKE_BINARY_DIR 设置为顶级源和构建树的方式来评估初始缓存脚本。

  • cmake(1) -E remove_directory 命令行工具现在在给定指向目录的符号链接的路径时,只会删除符号链接。它不再删除链接目录的内容。

  • ctest(1) --build-makeprogram 命令行选项现在指定使用 Ninja 生成器或 Makefile Generators 来配置项目时使用的 make 程序。

  • 模块 ExternalProjectExternalProject_Add() 命令已更新,使得 GIT_SUBMODULES "" 不初始化子模块了。请参阅策略 CMP0097

  • 模块 FindGTest 已更新,以识别 GTest 1.8.1 生成的 MSVC 构建树。

  • project() 命令不再删除版本组件中的前导零。请参阅策略 CMP0096

  • Qt 压缩帮助文件现名为 CMake.qch,其文件名不再包含发行版本。在原址升级 CMake 时,此文件的文件名和位置将保持不变。现在,诸如 IDE、帮助查看器等工具应该能够在固定的位置引用该文件,此位置在更新 CMake 之后仍然有效。

  • 为安装而生成的 CMake 脚本中 RPATH 已正确地进行了转义。请参阅策略 CMP0095

  • 在 Windows 上使用 CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS 时,只有在提供符号的对象文件更新之后才会更新自动生成的导出。

更新

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

3.16.2

  • CMake 3.16.0 和 3.16.1 使用 AUTOMOC 处理 .hh 文件。这是对 CMake 3.15 及以下版本的行为更改,它可能会破坏现有的项目,因此已在 3.16.2 中恢复。

3.16.5

  • FindPythonFindPython2FindPython3 模块不再为 Python{,2,3}_LIBRARY_RELEASEPython{,2,3}_LIBRARY_DEBUG 创建缓存条目。这些值始终会从其他结果计算出来,所以不应被缓存。3.16.0 至 3.16.4 版本的 CMake 创建了这些条目,但它们总是 FORCE 设置且用户无法对其进行有意义的编辑。

    此外,这些模块不再公开其内部 _Python* 缓存条目。由于误操作,CMake 3.16.0 至 3.16.4 版本将它们作为高级缓存条目显示。

3.16.7

3.16.9

  • CMAKE_AUTOMOC_PATH_PREFIX 的默认值已更改为 OFF,因为此功能会破坏在不同包含目录中有相同名称的头文件的现有项目。这恢复了与 CMake 3.15 及更低版本的兼容性。