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、工具集或操作系统位置。
命令行¶
命令¶
add_custom_command()
和add_custom_target()
命令学习支持WORKING_DIRECTORY
选项中的生成器表达式。创建了
add_link_options()
命令以在当前目录中添加链接选项。install(TARGETS)
命令学习安装在当前目录之外创建的目标。link_directories()
命令获得了控制插入位置的选项。list(SORT)
命令获得了控制用于对条目进行排序的比较操作的选项。math()
命令获得了十六进制的选项。创建了
target_link_directories()
命令,用于为目标及其依赖项指定链接目录。创建了
target_link_options()
命令,用于为目标及其依赖项指定链接选项。现在可以调用
target_link_libraries()
命令来修改在当前目录之外创建的目标。 请参阅策略CMP0079
。
变量¶
添加了
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
目标属性学习支持generator expressions
。添加了
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
目标属性,用于使用 VS 2010 及更高版本的 Visual Studio 生成器 设置调试命令行参数。创建了
VS_DEBUGGER_ENVIRONMENT
目标属性,用于使用 VS 2010 及更高版本的 Visual Studio 生成器 设置调试环境。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
选项,用于在输出到终端时启用实时测试进度摘要。
CPack¶
当设置
CPACK_DEBIAN_DEBUGINFO_PACKAGE
时,CPack DEB Generator
学习将调试符号拆分到相应的 .ddeb 包中。在打包文件时,
CPack DEB Generator
学习遵循SOURCE_DATE_EPOCH
环境变量。 这对于生成可重现的包很有用。CPack 获得了一个新的
CPack External Generator
,用于以其他软件可以理解的格式导出 CPack 元数据。 此生成器的目的是允许外部打包软件在无法为整个打包过程使用 CPack 时,利用 CPack 的功能。
已弃用和移除的特性¶
为策略
CMP0055
到CMP0063
添加了显式弃用诊断(CMP0054
及以下版本已弃用)。cmake-policies(7)
手册解释说,所有策略的 OLD 行为都已弃用,项目应移植到 NEW 行为。
其他更改¶
在
cmake.org
上提供的预编译二进制文件现在包含 qthelp 格式的文档。现在,
option()
命令会遵守同名的现有普通变量,并且不执行任何操作,而不是可能创建缓存条目(或设置其类型)并删除普通变量。 请参阅策略CMP0077
。Makefile 生成器 学习在
make clean
期间删除自定义命令和自定义目标副产品。现在,
target_sources()
命令将相对源文件路径解释为相对于当前源目录。 这简化了从子目录逐步构建目标的源。 添加了CMP0076
策略,以提供与旧行为的向后兼容性(如果需要)。不再允许在配置时包含
BundleUtilities
模块。 这无论如何一直是一个错误。 请参阅策略CMP0080
。现在,
LINK_DIRECTORIES
目标属性期望绝对路径。 请参阅策略CMP0081
。CPack 生成器已移至文档中自己的单独部分,而不是将其文档放在其内部实现模块中。 这些内部实现模块也不再可用于可能错误地包含它们的脚本,因为它们从一开始就不应该可用。
更新¶
自 CMake 3.13.0 以来的更改包括以下内容。
3.13.2¶
CMake 3.13.0 包含一项更改,用于将编译器隐式包含目录传递给
AUTOMOC
的moc
工具。 由于回归现有构建,此更改已恢复,需要在以后的版本中重新引入之前进行进一步调查。
3.13.3¶
修复了
Visual Studio 15 2017
生成器,以便在安装 VS 2019 时正常工作。现在,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
行为下)会错误地将这些依赖项的使用要求传播到链接静态库的依赖项。 这已得到修复。