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 扩展名的链接器导入文件。使用 target_link_libraries() 链接到其符号的可执行文件的插件(通过 add_library()MODULE 选项创建)现在使用导入文件进行链接。 install(TARGETS) 命令现在将导入文件安装为 ARCHIVE 工件。

  • 在 AIX 上,默认情况下不再启用运行时链接。 CMake 为链接器提供了足够的信息来预先解析所有符号。可以通过将“-Wl,-G”添加到它们的链接标志(例如,在 CMAKE_SHARED_LINKER_FLAGS 或 CMAKE_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”选项以保持向后兼容性。

命令

变量

特性

模块

  • FindDoxygen 模块 doxygen_add_docs() 命令获得了一个新的 USE_STAMP_FILE 选项。当此选项存在时,如果自上次成功运行以来任何源文件发生更改,则由命令创建的自定义目标将仅重新运行 Doxygen。

  • FindGnuTLS 模块现在提供了一个导入的目标。

  • FindPackageHandleStandardArgs 模块 find_package_handle_standard_args() 命令获得了一个新的 REASON_FAILURE_MESSAGE 选项来指定给出失败原因的消息。

  • FindPkgConfig 模块 pkg_search_module() 宏现在定义了一个包含第一个匹配模块名称的 <prefix>_MODULE_NAME 结果变量。

  • FindPython3 和 FindPython 模块获得了控制将搜索哪些 ABI 的选项。

  • FindPython3、FindPython2 和 FindPython 模块现在支持通过缓存条目直接指定工件。

自动生成器

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

C测试

包装

弃用和删除的功能

其他变化

  • 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 "" 不初始化任何子模块。请参阅政策:policy:CMP0097

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

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

  • Qt 压缩帮助文件现在命名为“CMake.qch”,文件名中不再包含发布版本。当 CMake 就地升级时,该文件的名称和位置将保持不变。 IDE、帮助查看器等工具现在应该能够在固定位置引用此文件,该位置在 CMake 升级期间仍然有效。

  • RPATH 条目在生成的用于安装的 CMake 脚本中被正确转义。请参阅政策:policy: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”-set,用户无法进行有意义的编辑。

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

3.16.7

3.16.9

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