CMake 3.7 发布说明¶
自 CMake 3.6 以来的更改包括以下内容。
新特性¶
平台¶
CMake 现在支持使用简单的工具链文件进行 交叉编译到 Android。
Clang 编译器现在在 AIX 上受支持。
生成器¶
Ninja
生成器学会了在使用具有必要功能的ninja
工具时有条件地支持 Fortran。有关详细信息,请参阅生成器文档。Ninja
生成器学会了生成sub/dir/{test,install,package}
形式的伪目标来驱动子目录安装、测试或打包目标的构建。这等效于使用 Makefile 生成器 的cd sub/dir; make {test,install,package}
。Visual Studio 15 2017
生成器已添加。这是实验性的,基于“Visual Studio 2017 RC”,因为此版本的 VS 尚未发布。Visual Studio 生成器(针对 VS 2010 及更高版本)学会了将
.natvis
源文件正确地放入 VS 项目文件中。Xcode
生成器的基础 Swift 语言支持学会了遵循新的CMAKE_Swift_LANGUAGE_VERSION
变量来告诉 Xcode 源代码使用哪个版本的 Swift。CodeLite
生成器获得了一个新的CMAKE_CODELITE_USE_TARGETS
选项,用于将项目创建从项目更改为目标。
命令¶
add_custom_command()
命令获得了一个新的DEPFILE
选项,该选项与Ninja
生成器一起使用,为构建工具提供隐式依赖信息。cmake_parse_arguments()
命令获得了一个新的PARSE_ARGV
模式,用于直接从ARGC
和ARGV#
变量读取参数,这些变量位于function()
函数体内部。export()
命令获得了一个ANDROID_MK
选项,用于生成引用 CMake 构建库作为预构建库的Android.mk
文件,供 Android NDK 构建系统使用。file(DOWNLOAD)
和file(UPLOAD)
命令获得了HTTPHEADER <HTTP-header>
和USERPWD <username>:<password>
选项。find_library()
和find_package()
命令学会了在构建目标为 32 位架构时搜索lib32/
目录。请参阅FIND_LIBRARY_USE_LIB32_PATHS
全局属性。find_package()
命令获得了通过NAME
或通过NATURAL
对兼容库进行排序的可能性,方法是设置两个新变量CMAKE_FIND_PACKAGE_SORT_ORDER
和CMAKE_FIND_PACKAGE_SORT_DIRECTION
。if()
命令获得了新的布尔比较操作LESS_EQUAL
、GREATER_EQUAL
、STRLESS_EQUAL
、STRGREATER_EQUAL
、VERSION_LESS_EQUAL
和VERSION_GREATER_EQUAL
。install()
命令获得了一个EXPORT_ANDROID_MK
子命令,用于安装引用已安装库作为预构建库的Android.mk
文件,供 Android NDK 构建系统使用。string(TIMESTAMP)
和file(TIMESTAMP)
命令获得了对%a
和%b
占位符的支持。这些是缩写的星期几和月份名称。现在,
try_compile()
命令的源文件签名会尊重特定配置的标志(例如CMAKE_<LANG>_FLAGS_DEBUG
)在生成的测试项目中。之前,仅使用当前工具链的默认标志。请参阅策略CMP0066
。
变量¶
添加了变量
CMAKE_FIND_PACKAGE_SORT_ORDER
用于控制find_package()
命令的排序模式。添加了变量
CMAKE_FIND_PACKAGE_SORT_DIRECTION
用于控制find_package()
命令的排序方向。工具链文件
现在可以设置CMAKE_<LANG>_FLAGS_INIT
变量以在构建树中首次启用语言时初始化CMAKE_<LANG>_FLAGS
缓存条目。工具链文件
现在可以设置CMAKE_EXE_LINKER_FLAGS_INIT
、CMAKE_SHARED_LINKER_FLAGS_INIT
和CMAKE_MODULE_LINKER_FLAGS_INIT
变量以在构建树中首次启用语言时初始化CMAKE_EXE_LINKER_FLAGS
、CMAKE_SHARED_LINKER_FLAGS
和CMAKE_MODULE_LINKER_FLAGS
缓存条目。
属性¶
在 Apple 平台上,
BUNDLE_EXTENSION
目标属性现在也适用于框架和应用包。添加了
BINARY_DIR
目录属性,用于获取与读取属性的源目录对应的二进制目录的绝对路径。添加了
BUILDSYSTEM_TARGETS
目录属性,用于获取项目在目录中添加的逻辑构建系统目标名称列表。引入了
LINK_WHAT_YOU_USE
目标属性和支持的CMAKE_LINK_WHAT_YOU_USE
变量,用于(在 UNIX 上)检测通过运行ldd -r -u
链接但不需要的共享库。添加了
SOURCE_DIR
目录属性,用于获取与目录关联的源目录的绝对路径。添加了
SUBDIRECTORIES
目录属性,用于获取项目在目录中添加的子目录列表。添加了
VS_SDK_REFERENCES
目标属性,以告知 Visual Studio 生成器 引用指定的 SDK。创建了
VS_TOOL_OVERRIDE
源文件属性,以告知 Visual Studio 生成器 对源文件使用哪个工具。现在,
WINDOWS_EXPORT_ALL_SYMBOLS
目标属性适用于设置了ENABLE_EXPORTS
属性的可执行目标。添加了
XCODE_FILE_ATTRIBUTES
源文件属性,以告知Xcode
生成器在文件的 Xcode 项目属性中生成自定义内容。
模块¶
添加了
AndroidTestUtilities
模块,用于管理测试数据到 Android 设备的传输。模块宏
CHECK_Fortran_SOURCE_COMPILES
CheckFortranSourceCompiles
获得了一个SRC_EXT
选项,用于指定自定义测试 Fortran 源文件扩展名。模块
ExternalProject
获得了HTTP_USERNAME
和HTTP_PASSWORD
选项,用于设置 http 下载凭据。模块
ExternalProject
获得了一个HTTP_HEADER
选项,用于添加 http 下载头。模块
FindBISON
的BISON_TARGET
宏学习了一个新的REPORT_FILE
选项,用于指定 bison 的--report-file=
选项。模块
FindBZip2
现在提供了导入的目标。引入了
FindICU
模块,用于查找 Unicode 国际组件 (ICU) 库和程序。模块
FindMatlab
学习了如何查找 SIMULINK 和 MAT 组件。The
FindMatlab
模块matlab_add_mex()
命令学会了添加可执行文件和模块。The
FindMatlab
模块matlab_add_unit_test()
命令学会了支持内联 Matlab 测试代码。The
FindOpenCL
模块现在提供了导入的目标。The
FindOpenMP
模块学会了从编译器检测 OpenMP 版本(规范日期)。添加了一个
FindVulkan
模块。The
GenerateExportHeader
模块学习了一个新的CUSTOM_CONTENT_FROM_VARIABLE
选项,用于指定包含自定义内容的变量,以便将其包含在生成的头部文件中。The
GNUInstallDirs
模块获得了一个新的GNUInstallDirs_get_absolute_install_dir()
命令。The
UseJava
模块获得了用于“导出”jar目标以供外部 CMake 项目使用的 API。请参阅install_jar_exports
和export_jars
函数。
CTest¶
CTest 现在通过新的
FIXTURES_SETUP
、FIXTURES_CLEANUP
和FIXTURES_REQUIRED
测试属性支持测试夹具。当使用正则表达式或--rerun-failed
来限制要运行的测试时,如果任何测试需要该夹具,则会自动将夹具的设置和清理测试添加到执行集中。The
ctest_configure()
、ctest_build()
、ctest_test()
、ctest_coverage()
和ctest_upload()
命令获得了一个新的CAPTURE_CMAKE_ERROR
选项,用于捕获命令运行时发生的任何错误到一个变量中,并避免影响ctest(1)
进程的返回代码。
CPack¶
CPack 在 OS X 上获得了一个
CPack productbuild Generator
。CPack 获得了一个新的
CPACK_PACKAGE_CHECKSUM
变量,以启用为每个包文件生成校验和文件。The
CPack DEB Generator
学会了在归档格式设置为 GNU tar 时支持长文件名。请参阅CPACK_DEBIAN_ARCHIVE_TYPE
The
CPackIFW
模块获得了一个新的cpack_ifw_add_package_resources()
命令,用于在安装程序二进制文件中包含其他资源。The
CPackIFW
模块cpack_ifw_configure_component()
和cpack_ifw_configure_component_group()
命令获得了一个新的USER_INTERFACES
选项,用于向 IFW 安装程序添加其他页面列表。The
CPack RPM Generator
学会了根据需要生成调试信息包。请参阅CPACK_RPM_DEBUGINFO_PACKAGE
及其每个组件版本。The
CPack RPM Generator
学会了根据需要生成源 rpm(SRPM)包。请参阅CPACK_RPM_PACKAGE_SOURCES
、CPACK_RPM_SOURCE_PKG_BUILD_PARAMS
和CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX
。The
CPack NSIS Generator
现在支持CPACK_NSIS_<compName>_INSTALL_DIRECTORY
。这可以用来设置特定于组件的安装目录。现在,
CPack WIX Generator
支持CPACK_WIX_SKIP_PROGRAM_FOLDER
,允许在 ProgramFiles 文件夹之外指定自定义的绝对安装前缀。现在,
CPack WIX Generator
支持CPACK_COMPONENT_<compName>_DISABLED
。这可以用来取消选择默认安装的组件。现在,
CPack WIX Generator
支持CPACK_WIX_PATCH_FILE
片段,用于 Feature 元素。现在,
CPack WIX Generator
支持CPACK_WIX_ROOT_FEATURE_TITLE
和CPACK_WIX_ROOT_FEATURE_DESCRIPTION
,允许为根功能元素指定自定义标题和描述。
其他¶
cmake(1)
获得了一个-E capabilities
选项,用于提供 CMake 工具功能(可用生成器等)的机器可读(JSON)描述。添加了一种新的
cmake-server(7)
模式,通过 JSON 协议向客户端提供有关 CMake 生成的构建系统的信息。目前所有协议均为实验性,可能会发生变化。The
cmake(1)
命令学习了一个--trace-source=<file>
选项。ccmake(1)
学习了支持类似 vim 的导航绑定。cmake-gui(1)
获得了一个按钮,用于打开为 Visual Studio 生成器 和Xcode
生成器生成的项目文件。
已弃用和移除的功能¶
我们不再从
cmake.org
为新版本的 CMake 下载 Linux i386 二进制文件。Vim 支持文件
cmake-indent.vim
、cmake-syntax.vim
和cmake-help.vim
已被移除,取而代之的是现在从 vim-cmake-syntax 项目提供的文件。放弃了使用某些编译器构建 CMake 本身。
Visual Studio 7.1 和 2005——由 VS 2008 及更高版本取代
MinGW.org mingw32——由 MSYS2 mingw32 和 mingw64 取代
CMake 仍然支持使用这些编译器为其他项目生成构建系统。
其他更改¶
Fortran 依赖项扫描程序学习了支持 Fortran 子模块 的语法。
现在,CMake 与 vim-cmake-syntax 项目的
indent/cmake.vim
和syntax/cmake.vim
Vim 支持文件一起分发。