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()
命令定义时,该操作符求值为真。请参阅策略CMP0064
。install(DIRECTORY)
命令的DESTINATION
选项现在支持生成器表达式
。install(FILES)
命令的DESTINATION
选项现在支持生成器表达式
。string()
命令新增了APPEND
子命令。
变量 (Variables)¶
Makefile 生成器 和
Ninja
生成器学会了为 C 和 CXX 语言添加编译器启动器(如 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_Add()
函数的GIT_SUBMODULES
选项现在除了先前限制更新的子模块集外,还限制了初始化的子模块集。外部项目模块新增了
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
选项,用于自定义作为 仪表盘客户端 运行时提交的测试输出大小限制。
CPack¶
CPack DEB 生成器
学会了按组件设置包依赖项。请参阅变量:CPack 模块学会了打包空目录。
CPack 模块新增了一个设置
CPACK_VERBATIM_VARIABLES
,可用于确保 cpack 程序接收设置值的确切值,即使它们包含 CMake 特殊字符。为兼容性考虑,该选项默认关闭。
其他 (Other)¶
已弃用和移除的功能 (Deprecated and Removed Features)¶
CMakeExpandImportedTargets 模块现在已文档化为已弃用。请参阅模块文档了解解释。
变量
CMAKE_USE_RELATIVE_PATHS
不再有任何影响。之前它曾部分实现且不可靠。
其他更改 (Other Changes)¶
CheckFunctionExists
、CheckLibraryExists
、CheckSymbolExists
和FindThreads
模块学会了在仅启用 CXX 的环境中工作。CPack DEB 生成器
现在正确地在包校验和计算期间排除符号链接。CPack DEB 生成器
不再使用 fakeroot 和系统 tar 程序进行打包。CPack 模块不再对用作其他设置默认值的设置进行 CMake 特殊字符的转义。负责此操作的宏
cpack_set_if_not_set
已被弃用。除非设置了
ENABLE_EXPORTS
目标属性,否则 CMake 不再使用导出符号的标志链接可执行文件。请参阅策略CMP0065
。不再为使用
add_library()
命令创建的MODULE
库设置SONAME
字段。MODULE
库用于在运行时显式动态加载。它们无法链接,因此SONAME
没有用处。内部
CMAKE_<LANG>_COMPILE_OBJECT
规则变量现在将编译器包含标志替换到单独的<INCLUDES>
占位符中,而不是主要的<FLAGS>
占位符。