CMake 3.4 发行说明¶
自 CMake 3.3 以来的更改包括以下内容。
新功能¶
生成器¶
生成器
Visual Studio 14 2015
学会了根据CMAKE_SYSTEM_VERSION
变量的值和主机上可用的 SDK 来选择 Windows 10 SDK。CMake 学会了对 Apple Swift 语言进行基本的初始支持。使用 Xcode 6.1 或更高版本与
Xcode
生成器时,可以使用enable_language()
命令或project()
命令启用Swift
语言(与其他生成器或 Xcode 版本太旧时,这将出错)。然后,可以将.swift
源文件列在要编译的目标中。
命令¶
find_program()
命令学习了一个NAMES_PER_DIR
选项,该选项可以在继续下一个目录之前考虑每个目录中的所有给定NAMES
。get_filename_component()
命令学习了一个新的BASE_DIR
子命令。当从相对路径计算绝对路径时,该命令用于指定一个基本目录。命令
if()
学习了一个新的TEST
运算符,如果add_test()
命令定义了给定的测试名称,则该运算符评估为真。请参见策略CMP0064
。命令
install(DIRECTORY)
的DESTINATION
选项学习了支持generator expressions
。命令
install(FILES)
的DESTINATION
选项学习了支持generator expressions
。命令
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 生成器是否在每个目标完成后生成打印输出的命令。在使用 MS 兼容工具的 Windows 上,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 工具。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
,以在作为 Dashboard Client 运行时自定义提交的测试输出大小的限制。
CPack¶
CPack DEB Generator
学会根据组件设置包依赖项。请参阅变量CPack
模块已经学会打包空目录。CPack
模块获取了一个新的设置,CPACK_VERBATIM_VARIABLES
,可用来确保 cpack 程序接收设置的值与其设置时完全一致,即使它们包含 CMake 特殊字符。出于兼容性的考虑,默认情况下它是关闭的。
其他¶
Compile Features
功能现在知道 Windows 上 GNU C 编译器支持的功能。CMake 已经学会使用 MSVC 工具处理
*.manifest
源文件。名为.exe
和.dll
目标源的清单文件将与链接器生成的清单合并并嵌入到二进制文件中。现在支持并发 Fortran 77 编译器。其
compiler id
为CCur
。cmake(1)
获取了一个新的--trace-expand
命令行选项,它类似于--trace
,但在输出中扩展变量引用。
已弃用和已移除的功能¶
CMakeExpandImportedTargets
模块现在被记录为已弃用。有关说明,请参阅模块文档。CMAKE_USE_RELATIVE_PATHS
变量不再有任何影响。它以前是部分实现且不可靠的。
其他更改¶
CheckFunctionExists
、CheckLibraryExists
、CheckSymbolExists
和FindThreads
模块已学会在仅启用 CXX 的环境中工作。CPack DEB Generator
现在在计算包校验和时,会正确地排除符号链接。CPack DEB Generator
不再使用 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>
占位符中。