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`` 添加了对平台选择的支持,例如``完整性``,
linux,``独立``等。不再检查是否安装了基于“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()命令来修改在当前目录之外创建的目标。请参阅政策:policy: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目标属性以使用 Visual Studio 生成器 为 VS 2010 及更高版本设置调试命令行参数。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++ 引擎和 DataArray 库。
FindMatlab 模块现在在 Visual Studio 中显式导出 mexFunction。
FindMatlab模块获得了一个新的MCC_COMPILER组件来请求查找 Matlab 编译器插件。FindPkgConfig模块获得了在全局范围内创建导入目标的选项。除了已经支持的操作符
>=、<=和 `` 之外,FindPkgConfig模块还支持用于版本检查的<和>操作符=``。模块
FindPython3、模块:FindPython2 和FindPython获得控制 macOS(框架)和 Windows(注册表)上资源查找顺序的能力。FindSubversion模块Subversion_WC_INFO命令获得了IGNORE_SVN_FAILURE选项来抑制失败,例如当源代码树不受 Subversion 控制时。UseSWIG 模块学会了管理目标属性 INCLUDE_DIRECTORIES 以进行 SWIG 编译。
C测试¶
ctest(1)获得了一个--progress选项,可以在输出到终端时启用实时测试进度摘要。
包装¶
CPack DEB Generator学会了在设置CPACK_DEBIAN_DEBUGINFO_PACKAGE时将调试符号拆分为相应的 .ddeb 包。CPack DEB Generator学会了在打包文件时遵守SOURCE_DATE_EPOCH环境变量。这对于生成可重现的包很有用。CPack 获得了一个新的 CPack 外部生成器,用于以其他软件可以理解的格式导出 CPack 元数据。该生成器的目的是允许外部打包软件在可能无法在整个打包过程中使用 CPack 时利用 CPack 的功能。
弃用和删除的功能¶
为策略“CMP0055”到“CMP0063”添加了明确的弃用诊断(“CMP0054”及以下已弃用)。
cmake-policies(7)手册解释说所有策略的旧行为都已弃用,项目应该移植到新行为。
其他变化¶
cmake.org上提供的预编译二进制文件现在包括 qthelp-format 文档。option()命令现在支持同名的现有普通变量并且不执行任何操作,而不是可能创建缓存条目(或设置其类型)并删除普通变量。请参阅政策:policy:CMP0077。Makefile 生成器 学会了在
make clean期间删除自定义命令和自定义目标副产品。target_sources()命令现在将相对源文件路径解释为相对于当前源目录。这简化了从子目录逐步构建目标源的过程。添加了CMP0076策略以在需要时提供与旧行为的向后兼容性。BundleUtilities模块可能不再包含在配置时。无论如何,这始终是一个错误。请参阅政策:policy:CMP0080。UseSWIG模块更改了目标命名策略。请参阅政策:policy:CMP0078。LINK_DIRECTORIES目标属性现在需要绝对路径。请参阅政策:policy: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 现在会检查在运行 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依赖项添加到在另一个目录中创建的静态库(根据策略CMP0079NEW行为)会错误地将这些依赖项的使用要求传播到链接静态库的依赖项。这已得到修复。