CMake 3.4 发行说明¶
自 CMake 3.3 以来的更改包括以下内容。
新特性¶
生成器¶
Visual Studio 14 2015
生成器学习了基于CMAKE_SYSTEM_VERSION
变量的值和主机上可用的 SDK 来选择 Windows 10 SDK。CMake 学习了对 Apple Swift 语言的基本支持。当将
Xcode
生成器与 Xcode 6.1 或更高版本一起使用时,可以使用Swift
语言通过enable_language()
命令或project()
命令启用(与其他生成器或 Xcode 版本过旧时会报错)。然后,可以在目标中列出.swift
源文件以进行编译。
命令¶
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
子命令。
变量¶
Makefile 生成器 和
Ninja
生成器学习了添加编译器启动器工具,如 distcc 和 ccache,以及用于C
和CXX
语言的编译器。请参阅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
目标属性。
属性¶
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
目标属性。
模块¶
ExternalProject
模块的ExternalProject_Add()
函数的GIT_SUBMODULES
选项现在也限制了初始化的子模块集,除了先前限制更新的子模块集的行为之外。ExternalProject
模块学习了新的USES_TERMINAL
参数,用于为步骤提供独占终端访问权限。这与Ninja
生成器一起使用时,可以监视 CMake 超级构建进度并防止 CPU 过度订阅。FindBISON
模块的BISON_TARGET
宏学习了一个新的DEFINES_FILE
选项,用于指定要生成的自定义输出头文件。FindHDF5
模块学习了一个新的HDF5_PREFER_PARALLEL
选项,允许用户指定如果并行 HDF5 工具和非并行 HDF5 工具都可用,则首选并行 HDF5 工具。FindIce
模块现在提供导入的目标。FindJava
模块学习了可选地查找idlj
和jarsigner
工具。FindOpenSSL
模块现在提供导入的目标。FindOpenSSL
模块学习了一个新的OPENSSL_USE_STATIC_LIBS
选项,仅搜索静态库。FindPkgConfig
学习了一个新的pkg_get_variable()
命令,该命令可用于查询包中的任意变量(例如,用于相关工具或数据和插件安装路径)。FindProtobuf
模块获得了一个新的protobuf_generate_python()
函数,用于从.proto
文件生成 python 源代码。FindTIFF
模块学习了分别搜索调试和发布变体。FindwxWidgets
模块学习了支持版本请求。FindXercesC
模块学习了分别搜索调试和发布变体。FindZLIB
模块学习了分别搜索调试和发布变体。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
,以自定义作为 仪表板客户端 运行时提交的测试输出大小的限制。
CPack¶
CPack DEB 生成器
学习了为每个组件设置包依赖项。请参阅变量CPack
模块学习了打包空目录。CPack
模块获得了一个新的设置CPACK_VERBATIM_VARIABLES
,该设置可用于确保 cpack 程序接收到的设置值与设置的值完全相同,即使它们包含 CMake 特殊字符。为了兼容性,默认情况下它是关闭的。
其他¶
已弃用和移除的特性¶
CMakeExpandImportedTargets
模块现在被记录为已弃用。请参阅模块文档以获取说明。CMAKE_USE_RELATIVE_PATHS
变量不再有任何效果。以前它只是部分实现且不可靠。
其他更改¶
CheckFunctionExists
、CheckLibraryExists
、CheckSymbolExists
和FindThreads
模块学习了在仅启用 CXX 的环境中工作。CPack DEB 生成器
现在在包校验和计算期间正确地排除符号链接。CPack DEB 生成器
不再使用 fakeroot 和系统 tar 程序进行打包。CPack
模块不再混淆包含 CMake 特殊字符的设置,当这些设置用作其他设置的默认值时。负责此操作的宏cpack_set_if_not_set
现在已弃用。CMake 不再使用导出符号的标志链接可执行文件,除非设置了
ENABLE_EXPORTS
目标属性。请参阅策略CMP0065
。不再为使用
add_library()
命令创建的MODULE
库设置SONAME
字段。MODULE
库旨在在运行时进行显式动态加载。它们无法链接,因此SONAME
没有用处。内部
CMAKE_<LANG>_COMPILE_OBJECT
规则变量现在在单独的<INCLUDES>
占位符中替换编译器包含标志,而不是在主要的<FLAGS>
占位符中替换。