CMake 3.4 发行说明¶
自 CMake 3.3 以来的变更包括以下内容。
新特性¶
生成器 (Generators)¶
生成器
Visual Studio 14 2015已学会根据CMAKE_SYSTEM_VERSION变量的值和主机上可用的 SDK 来选择 Windows 10 SDK。CMake 增加了对 Apple Swift 语言的基本支持。当使用
Xcode生成器和 Xcode 6.1 或更高版本时,可以使用enable_language()命令或project()命令启用Swift语言(对于其他生成器或过旧的 Xcode 版本,这是一个错误)。然后,可以在目标中列出.swift源文件进行编译。
命令 (Commands)¶
find_program()命令增加了一个NAMES_PER_DIR选项,以便在进入下一个目录之前,先考虑当前目录下的所有指定的NAMES。get_filename_component()命令增加了一个新的BASE_DIR子命令。这用于在从相对路径计算绝对路径时指定一个基础目录。if()命令增加了一个新的TEST操作符,当给定的测试名称由add_test()命令定义时,该操作符求值为 true。请参阅策略CMP0064。install(DIRECTORY)命令的DESTINATION选项现在支持生成器表达式。install(FILES)命令的DESTINATION选项现在支持生成器表达式。string()命令增加了一个新的APPEND子命令。
变量 (Variables)¶
Makefile 生成器 和
Ninja生成器现在可以为C和CXX语言与编译器一起添加 compiler launcher 工具,例如 distcc 和 ccache。详情请参见CMAKE_<LANG>_COMPILER_LAUNCHER变量和<LANG>_COMPILER_LAUNCHER目标属性。引入了新的
CMAKE_LINK_SEARCH_START_STATIC和CMAKE_LINK_SEARCH_END_STATIC变量,分别用于初始化LINK_SEARCH_START_STATIC和LINK_SEARCH_END_STATIC目标属性。
属性 (Properties)¶
Visual Studio 生成器 现在支持额外的目标属性,用于自定义针对 NVIDIA Nsight Tegra Visual Studio Edition 的项目
ARCHIVE_OUTPUT_DIRECTORY、LIBRARY_OUTPUT_DIRECTORY和RUNTIME_OUTPUT_DIRECTORY目标属性现在支持生成器表达式。引入了
SOURCE_DIR和BINARY_DIR目标属性,以允许项目代码查询目标定义的位置。OUTPUT_NAME目标属性及其变体现在支持生成器表达式。增加了
TARGET_MESSAGES全局属性,用于告知 Makefile 生成器 是否生成命令在每个目标完成后打印输出。在 Windows 上使用 MS 兼容工具时,CMake 现在可以选择为
SHARED库生成模块定义(.def)文件。请参阅WINDOWS_EXPORT_ALL_SYMBOLS目标属性。
模块 (Modules)¶
ExternalProject 模块的
ExternalProject_Add()函数的GIT_SUBMODULES选项现在除了先前限制更新的子模块集之外,还限制了初始化的子模块集。ExternalProject 模块增加了新的
USES_TERMINAL参数,用于为步骤提供独占的终端访问。这对于 Ninja 生成器很有用,可以监控 CMake 超级构建进度并防止 CPU 过载。FindBISON 模块的
bison_target()命令增加了一个新的DEFINES_FILE选项,用于指定一个要生成的自定义输出头文件。FindHDF5 模块增加了一个新的
HDF5_PREFER_PARALLEL选项,允许用户指定在同时存在并行 HDF5 工具时优先选择并行工具。FindIce 模块现在提供导入的目标。
FindJava 模块现在可以根据需要查找
idlj和jarsigner工具。FindOpenSSL 模块现在提供导入的目标。
FindOpenSSL 模块增加了一个新的
OPENSSL_USE_STATIC_LIBS选项,用于仅搜索静态库。FindPkgConfig 模块增加了新的
pkg_get_variable()命令,可用于查询包中的任意变量(例如,相关工具或数据和插件的安装路径)。FindProtobuf 模块增加了一个新的
protobuf_generate_python()命令,用于从.proto文件生成 Python 源文件。FindTIFF 模块现在可以分别搜索 debug 和 release 变体。
FindwxWidgets 模块现在支持版本请求。
FindXercesC 模块现在可以分别搜索 debug 和 release 变体。
FindZLIB 模块现在可以分别搜索 debug 和 release 变体。
GNUInstallDirs 模块根据 GNU 编码标准和 文件系统层次结构标准,为某些安装前缀学习了特殊的默认值。
UseJava 模块的
add_jar函数现在支持响应文件(例如@srcs.txt)进行源文件指定。UseJava 模块的
install_jar函数现在支持新的DESTINATION和COMPONENT选项,用于指定相应的install()命令选项。UseJava 模块增加了一个新的
create_javah函数,用于从 Java 类创建 C 头文件。
生成器表达式¶
新增了一个
$<SHELL_PATH:...>生成器表达式。
CTest¶
CTest 现在可以选择在并行测试期间测量 CPU 负载,并避免启动可能导致负载超过给定阈值的测试。请参阅
ctest(1)命令的--test-load选项、CTest 测试步骤 的TestLoad设置、CTEST_TEST_LOAD变量以及ctest_test()命令的TEST_LOAD选项。ctest(1)增加了--test-output-size-passed和--test-output-size-failed选项,用于自定义作为 Dashboard Client 运行时提交的测试输出大小限制。
CPack¶
CPack DEB Generator现在可以为每个组件设置包依赖项。请参阅变量CPack 模块现在可以打包空目录。
CPack 模块增加了一个新设置
CPACK_VERBATIM_VARIABLES,该设置可以确保 cpack 程序接收到设置值的精确值,即使它们包含 CMake 特殊字符。为了兼容性,默认情况下此设置为关闭状态。
其他 (Other)¶
Compile Features功能现在支持 GNU C 编译器在 Windows 上的功能。CMake 现在可以识别 MSVC 工具的
*.manifest源文件。命名为.exe和.dll目标源文件的 Manifest 文件将被合并到链接器生成的 Manifest 中,并嵌入到二进制文件中。现在支持 Concurrent Fortran 77 编译器。其
compiler id为CCur。cmake(1)增加了新的--trace-expand命令行选项,它类似于--trace,但会在输出中展开变量引用。
已弃用和移除的功能 (Deprecated and Removed Features)¶
CMakeExpandImportedTargets 模块现在已被文档化为已弃用。请参阅模块文档以了解详细说明。
CMAKE_USE_RELATIVE_PATHS变量不再有任何效果。以前它部分实现且不可靠。
其他更改 (Other Changes)¶
CheckFunctionExists、
CheckLibraryExists、CheckSymbolExists和 FindThreads 模块现在可以在仅启用 CXX 的环境中工作。CPack DEB Generator现在在计算包校验和时正确排除了符号链接。CPack DEB Generator不再使用 fakeroot 和 system tar 程序进行打包。CPack模块不再将包含 CMake 特殊字符的设置作为其他设置的默认值进行混淆。负责此操作的宏cpack_set_if_not_set现在已弃用。CMake 不再链接带有导出符号标志的可执行文件,除非设置了
ENABLE_EXPORTS目标属性。请参阅策略CMP0065。使用
add_library()命令创建的MODULE库不再设置SONAME字段。MODULE库用于在运行时显式动态加载。它们无法链接,因此SONAME无用。内部
CMAKE_<LANG>_COMPILE_OBJECT规则变量现在将在单独的<INCLUDES>占位符中替换编译器包含标志,而不是在主要的<FLAGS>占位符中。