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()命令定义,则该运算符的计算结果为 true。请参阅政策:policy: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目标属性学会了支持generator expressions。SOURCE_DIR和BINARY_DIR目标属性被引入以允许项目代码查询定义目标的位置。OUTPUT_NAME目标属性及其变体学会了支持generator expressions。添加了一个
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:...>``:manual:generator expression <cmake-generator-expressions(7)>。
C测试¶
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 DEB Generator学会了为每个组件设置包依赖性。查看变量:CPack模块学会了打包空目录。CPack模块获得了一个新设置,CPACK_VERBATIM_VARIABLES,可用于确保 cpack 程序接收设置的值,即使它们包含 CMake 特殊字符也是如此。为了兼容性,默认情况下它是关闭的。
其他¶
Compile Features功能现在可以识别 Windows 上 GNU C 编译器支持的功能。CMake 学会了使用 MSVC 工具来尊重
*.manifest源文件。命名为“.exe”和“.dll”目标源的清单文件将与链接器生成的清单合并并嵌入到二进制文件中。现在支持 Concurrent Fortran 77 编译器。它的
编译器 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 不再链接带有标志的可执行文件以导出符号。请参阅政策:policy:CMP0065。不再为使用
add_library()命令创建的MODULE库设置SONAME字段。MODULE库用于在运行时显式动态加载。它们无法链接,因此SONAME没有用。内部
CMAKE_<LANG>_COMPILE_OBJECT规则变量现在替换编译器包含标志在一个单独的<INCLUDES>占位符而不是主要的<FLAGS>占位符。