CMake 3.13 发布说明¶
自 CMake 3.12 起所做的更改包括以下内容。
新功能¶
生成器¶
- 适用于 VS 2010 及更高版本的 Visual Studio 生成器 增加了对 - INTERPROCEDURAL_OPTIMIZATION目标属性和支持的- CheckIPOSupported模块的支持。
- Xcode生成器学会了配置更多 Xcode Scheme 字段。请参阅- CMAKE_XCODE_GENERATE_SCHEME变量。
- Green Hills MULTI生成器已更新- 通过 - CMAKE_GENERATOR_PLATFORM添加了对架构选择的支持:例如- arm、- ppc和- 86。
- 通过 - CMAKE_GENERATOR_TOOLSET添加了对工具集选择的支持,例如- comp_201205、- comp_201510、- comp_201722_beta。
- 通过 - GHS_TARGET_PLATFORM添加了对平台选择的支持,例如- integrity、- linux、- standalone等。
- 不再检查是否安装了基于 - arm的编译器,但确保- gbuild.exe正确存在。
- 不再硬编码 ARM 文件、BSP、工具集或 OS 位置。 
 
命令行¶
命令¶
- add_custom_command()和- add_custom_target()命令学会了支持- WORKING_DIRECTORY选项中的生成器表达式。请参阅- add_custom_command()和- add_custom_target()。
- 创建了 - add_link_options()命令以在当前目录中添加链接选项。请参阅- add_link_options()。
- install(TARGETS)命令学会了安装在当前目录之外创建的目标。请参阅- install(TARGETS)。
- link_directories()命令增加了控制插入位置的选项。请参阅- link_directories()。
- list(SORT)命令增加了控制用于对条目进行排序的比较操作的选项。请参阅- list(SORT)。
- math()命令增加了十六进制的选项。请参阅- math()。
- 创建了 - target_link_directories()命令来为目标及其依赖项指定链接目录。请参阅- target_link_directories()。
- 创建了 - target_link_options()命令来为目标及其依赖项指定链接选项。请参阅- target_link_options()。
- target_link_libraries()命令现在可以被调用来修改在当前目录之外创建的目标。请参阅策略- CMP0079。请参阅- target_link_libraries()。
变量¶
- 添加了 - CMAKE_AUTOGEN_VERBOSE变量,以在 CMake 项目代码中选择性地增加- AUTOMOC、- AUTOUIC和- AUTORCC的详细程度。
- 添加了 - CMAKE_VS_GLOBALS变量,用于在创建目标时初始化- VS_GLOBAL_<variable>目标属性。
属性¶
- 添加了 - DEPLOYMENT_ADDITIONAL_FILES目标属性,以告知- Visual Studio 9 2008生成器为部署到 WinCE 设备进行远程调试指定其他文件。
- 创建了 - INTERFACE_LINK_DEPENDS目标属性,用于指定对文件的传递性链接依赖。
- LINK_DEPENDS目标属性学会了支持- 生成器表达式。请参阅- LINK_DEPENDS。
- 添加了 - LINK_DIRECTORIES和- INTERFACE_LINK_DIRECTORIES目标属性,用于收集目标及其依赖项的链接目录。使用- target_link_directories()命令设置它们。
- 添加了 - LINK_OPTIONS和- INTERFACE_LINK_OPTIONS目标属性,用于收集目标及其依赖项的链接选项。使用- target_link_options()命令设置它们。
- 添加了 - LINK_OPTIONS目录属性,用于收集在当前目录下创建的目标的链接选项。使用- add_link_options()命令设置它。
- 创建了 - STATIC_LIBRARY_OPTIONS目标属性,用于指定创建静态库时使用的归档器选项。
- 创建了 - VS_DEBUGGER_COMMAND_ARGUMENTS目标属性,用于使用 Visual Studio 生成器 为 VS 2010 及更高版本设置调试命令行参数。
- 创建了 - VS_DEBUGGER_ENVIRONMENT目标属性,用于使用 Visual Studio 生成器 为 VS 2010 及更高版本设置调试环境。
- VS_DEBUGGER_COMMAND和- VS_DEBUGGER_WORKING_DIRECTORY目标属性现在支持生成器表达式。
模块¶
- FindBoost模块增加了一个- Boost_ARCHITECTURE选项,用于指定特定于 Boost 架构的库文件名片段。
- FindCURL模块学会了分别查找调试和发布变体。
- FindMatlab模块增加了新的组件- ENGINE_LIBRARY和- DATAARRAY_LIBRARY,分别用于请求查找 Matlab C++ Engine 和 DataArray 库。
- FindMatlab模块现在显式地在 Visual Studio 中导出 mexFunction。
- FindMatlab模块增加了一个新的- MCC_COMPILER组件,用于请求查找 Matlab Compiler 插件。
- FindPkgConfig模块增加了一个选项,用于在全局范围内创建导入的目标。
- FindPkgConfig模块增加了对版本检查中的- <和- >运算符的支持,以及已经支持的运算符- >=、- <=和- =。
- FindPython3、- FindPython2和- FindPython模块增加了控制 macOS (Framework) 和 Windows (Registry) 上资源查找顺序的能力。
- FindSubversion模块的- Subversion_WC_INFO命令增加了- IGNORE_SVN_FAILURE选项,以抑制失败,例如当源树不受 Subversion 控制时。
- UseSWIG模块学会了为- SWIG编译管理- INCLUDE_DIRECTORIES目标属性。
CTest¶
- ctest(1)命令增加了- --progress选项,用于在输出到终端时启用实时测试进度摘要。请参阅- ctest(1)。
CPack¶
- CPack DEB Generator模块在设置- CPACK_DEBIAN_DEBUGINFO_PACKAGE时,学会了将调试符号拆分到相应的 .ddeb 包中。
- CPack DEB Generator模块在打包文件时,学会了尊重- SOURCE_DATE_EPOCH环境变量。这对于生成可重现的包很有用。
- CPack 增加了一个新的 - CPack External Generator,用于以其他软件可以理解的格式导出 CPack 元数据。该生成器的目的是允许外部打包软件在无法完成整个打包过程时利用 CPack 的功能。
已弃用和已删除的功能¶
- 为策略 - CMP0055至- CMP0063(- CMP0054及更早的策略已弃用)添加了明确的弃用诊断。- cmake-policies(7)手册解释了所有策略的 OLD 行为已被弃用,项目应迁移到 NEW 行为。
其他更改¶
- 在 - cmake.org上提供的预编译二进制文件现在包含 qthelp 格式的文档。
- option()命令现在会优先考虑同名的现有普通变量,而不会创建缓存条目(或设置其类型)并删除普通变量。请参阅策略- CMP0077。请参阅- option()。
- Makefile 生成器 学会了在 - make clean过程中移除自定义命令和自定义目标的副产品。
- target_sources()命令现在将相对源文件路径解释为相对于当前源目录。这简化了从子目录中逐步构建目标源的过程。添加了- CMP0076策略以提供与旧行为的向后兼容性,以防需要。请参阅- target_sources()。
- BundleUtilities模块不再允许在配置时包含。这总之是一个错误。请参阅策略- CMP0080。
- LINK_DIRECTORIES目标属性现在期望绝对路径。请参阅策略- CMP0081。
- CPack 生成器已移至文档的独立部分,而不是将其文档保留在其内部实现模块中。这些内部实现模块现在也不再可供可能错误地包含它们的脚本使用,因为它们本就不应可用。 
更新¶
自 CMake 3.13.0 起所做的更改包括以下内容。
3.13.2¶
- CMake 3.13.0 包含一项更改,将编译器隐式包含目录传递给 - AUTOMOC工具。此更改已被撤销,因为它导致现有构建出现回归,需要在后续版本中重新引入。
3.13.3¶
- 已修复 - Visual Studio 15 2017生成器,使其在安装 VS 2019 时也能正常工作。
- CMake 现在会检查运行 CMake 时是否指定了至少一个源目录或二进制目录,并在两者都缺失时发出错误。这始终是文档的要求,但之前的实现意外地接受了两者均未指定但提供了其他参数的情况,并默默地将当前工作目录用作源和构建树。 
3.13.4¶
- 3.13.3 添加的关于未指定源目录或二进制目录的错误已降级为警告。虽然这从未是预期、文档化或支持的行为,但一些项目依赖于它。在 3.13.x 系列的剩余版本中,错误已降级为警告,以便允许过渡期,但在后续版本中可能会再次成为致命错误。依赖于旧行为的脚本可以通过显式指定源树路径(即使只是 - .)来轻松修复,并继续与所有 CMake 版本兼容。
3.13.5¶
- 在 CMake 3.13.0 到 3.13.4 版本中,调用 - target_link_libraries()来向在另一个目录中创建的静态库添加- PRIVATE依赖项(在策略- CMP0079- NEW行为下)会错误地将这些依赖项的使用要求传播给链接该静态库的依赖项。此问题已修复。
