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 目标属性可以被启用,以生成 moc-p 路径前缀选项。这可以确保 moc 输出文件在不同的构建设置下是相同的(前提是 moc 编译的头文件位于 include directory 中)。它还确保当源目录和/或构建目录是符号链接时,moc 输出文件能够正确编译。

CTest

CPack

已弃用和已移除的功能

其他更改

  • cmake(1)-C <initial-cache> 选项现在使用 CMAKE_SOURCE_DIRCMAKE_BINARY_DIR 设置为顶级源目录和构建目录来评估初始缓存脚本。

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

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

  • 已更新 ExternalProject 模块的 ExternalProject_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 创建缓存条目。这些值始终根据其他结果计算,因此不应缓存。这些条目由 CMake 3.16.0 至 3.16.4 创建,但始终被 FORCE 设置,用户无法有意义地编辑。

    此外,这些模块不再公开其内部 _Python* 缓存条目。CMake 3.16.0 至 3.16.4 意外地将它们显示为高级缓存条目。

3.16.7

3.16.9

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