CMake 各个版本添加的新特性 · Modern CMake

您所在的位置:网站首页 文件版本都有哪些 CMake 各个版本添加的新特性 · Modern CMake

CMake 各个版本添加的新特性 · Modern CMake

2024-07-10 20:59| 来源: 网络整理| 查看: 265

CMake 各个版本添加的新特性

CMake 修改记录的简化版本,这里仅挑了作者认为的重点。这里,每个版本的名称都由作者自行命名,不要太在意。

CMake 3.0:接口库

这个版本添加了大量内容,主要是为了填充目标接口。一些需要的功能遗弃了,并在 CMake 3.1 中重新实现。

首次发布于 2014年6月10日 更新了文档 添加了 INTERFACE 库类型 支持项目版本关键字 VERSION 导出构建树更容易 括号参数和支持注释(未广泛使用) 以及其他很多改进 CMake 3.1:支持 C++11 和编译特性

支持 C++11 的第一个版本,并针对 CMake 3.0 新特性进行了修复。如若需要使用旧版 CMake,该版本推荐作为最低。

首次发布于 2014年12月17日 支持 C++11 支持编译特性 源文件可以通过 target_sources 在创建目标之后添加 优化了生成器表达式和 INTERFACE 目标 CMake 3.2:UTF8

一个小版本,主要是添加了小功能和对之前功能缺陷的修复。还有一些内部变化有,我认为对 Windows 和 UTF8 支持更好这个很重要。

首次发布于 2015年3月11日 可以在循环中使用 continue() 新增文件和目录锁 CMake 3.3:if 中添加 IN_LIST

if中添加了 IN_LIST 选项,并且可以使用环境变量 $PATH (详见 CMake 3.6) 对库文件进行搜索,添加了 INTERFACE 库的依赖关系,还有其他一些改进。随着支持的语言越来越多, COMPILE_LANGUAGE 支持生成器表达式就很有必要了。并且,Makefile 在并行执行时的输出更好看了。

首次发布于2015年7月23日 if 支持 IN_LIST 关键字 新增 *_INCLUDE_WHAT_YOU_USE 属性 COMPILE_LANGUAGE 支持生成器表达式(只有某些生成器支持) CMake 3.4:Swift & CCache

这个版本增加了许多有用的工具,对 Swift 语言的支持,以及常用功能的改进。也开始支持编译器启动器,比如 CCache。

首次发布于 2015年11月12日 支持 Swift 语言 get_filename_component 添加BASE_DIR 选项 新增 if(TEST ...) 新增 string(APPEND ...) 为 make 和 ninja 添加了新的内置变量 CMAKE_*_COMPILER_LAUNCHER TARGET_MESSAGES 允许 Makefile 在目标完成后打印消息 导入目标开始出现在官方的 Find*.cmake 文件中 CMake 3.5:ARM

这个版本将 CMake 扩展到更多的平台,并且可以使用命令行来控制警告信息。

首次发布于 2016年3月8日 多个输入文件可以对应多个 cmake -E 命令。 内置 cmake_parse_arguments 解析指令 Boost、GTest 等库支持导入目标 支持 ARMCC,优化对 iOS 的支持 XCode 反斜杠问题修复 CMake 3.6:Clang-Tidy

这个版本增加了 Clang-Tidy 支持,添加了更多的工具和对原有功能的改进。 取消了在 Unix 系统上搜索 $PATH 的问题,取而代之的是使用 $CMAKE_PREFIX_PATH。

首次发布于 2016年7月7日 为工程安装时添加 EXCLUDE_FROM_ALL 新增 list(FILTER 工具链添加了 CMAKE_*_STANDARD_INCLUDE_DIRECTORIES和CMAKE_*_STANDARD_LIBRARIES 改进了 Try-compile 功能 新增 *_CLANG_TIDY 属性 外部项目可以是浅克隆,以及其他改进 CMake 3.7:Android & CMake 的服务器模式

可以使用交叉编译,构建在 Android 平台运行的程序。if 的新选项可使代码可读性更好。新增的服务器模式是为了提高与 IDE 的集成(但 CMake 3.14+ 使用另一种方式取而代之)。优化了对 VIM 编辑器的支持。

首次发布于 November 11, 2016 cmake_parse_arguments 新增了 PARSE_ARGV 模式 改进了在 32 位工程在 64 位环境中的构建 if 增加了很多好用的比较选项,比如 VERSION_GREATER_EQUAL (真的需要这么久吗?) 新增 LINK_WHAT_YOU_USE 大量与文件和目录相关的自定义属性 新增 CMake 服务器模式 新增 --trace-source="filename",用于监控某些文件 CMake 3.8:C# & CUDA

CUDA 作为一种语言加入了 CMake,使用 cxx_std_11 作为编译器元特性。若使用 CMake 3.8+,新的生成器表达式真的很好用!

首次发布于2017年4月10日 原生支持 C# 语言 原生支持 CUDA 语言 新增元特性 cxx_std_11(以及14和17) 优化 try_compile 对语言的支持 新增 BUILD_RPATH 属性 COMPILE_FLAGS 支持生成器表达式 新增 *_CPPLINT 新增 $ (wow!) 新增 source_group(TREE (终于可以在 IDE 中显示项目的文件夹结构了!) CMake 3.9:IPO

这个版本对 CUDA 支持进行了大量修复,包括对 PTX 和 MSVC 生成器的支持。过程间优化(IPO)已正确支持了。

甚至有更多模块提供导入的目标,包括 MPI。

首次发布于2017年7月18日 CUDA 支持 Windows 优化部分情况下对对象库的支持 project 新增 DESCRIPTION 关键字 separate_arguments 新增 NATIVE_COMMAND 模式 INTERPROCEDURAL_OPTIMIZATION 强制执行(以及添加 CMAKE_* 初始化器,新增 CheckIPOSupported,支持 Clang 和 GCC ) 新增了GoogleTest模块 对FindDoxygen进行了大幅度改进 CMake 3.10:CppCheck

CMake 现在使用 C++11 编译器构建,许多改进有助于编写可读性更好的代码。

首次发布于2017年11月20日 支持 Fortran 编译器 flang 将编译器启动器添加到 CUDA configure_file 支持 #cmakedefines 新增 include_guard(),确保CMake源文件只包含一次 新增 string(PREPEND 新增 *_CPPCHECK 属性 目录添加了 LABELS 属性 极大地扩展了 FindMPI 模块 优化了 FindOpenMP 模块 GoogleTest 可动态发现测试用例 cmake_host_system_information 可获取更多信息。 CMake 3.11:更快 & IMPORTED INTERFACE

这个版本运行起来 应该会 快很多,还可以直接将 INTERFACE 目标添加到 IMPORTED 库(内部的 Find*.cmake 脚本会更加清晰)。

首次发布于 2018年3月28日 Fortran 支持编译器启动器 Xcode 和 Visual Studio 支持 COMPILE_LANGUAGE 的生成器表达式 可以直接将 INTERFACE 目标添加到 IMPORTED INTERFACE 库中(Wow!) 对源文件属性进行了扩展 FetchContent 模块现在允许在配置时下载 (Wow) CMake 3.12:版本范围和CONFIGURE_DEPENDS

非常牛的版本,包含了许多长期要求添加的小功能。其中一个是新增了版本范围,现在可以更容易地设置最低和最高的 CMake 版本了。也可以在一组使用 GLOB 获取的文件上设置 CONFIGURE_DEPENDS,构建系统将检查这些文件,并在需要时重新运行!还可以对 find_package 的搜索路径使用通用的 PackageName_ROOT 。对 string 和 list 大量的功能添加、模块更新、全新的 Python 查找模块(2 和 3 版本都有)等等。

首次发布于2018年7月17日 支持 cmake_minimum_required 的范围表示(向后兼容) 使用命令行 --build 构建时,支持 -j,--parallel 进行并行构建(传递给构建工具) 支持编译选项中的 SHELL: 字符串(不删除) 新增 FindPython 模块 新增 string(JOIN,list(JOIN 和 list(TRANSFORM 新增 file(TOUCH 和 file(GLOB CONFIGURE_DEPENDS 支持 C++20 CUDA 作为语言的改进:支持 CUDA 7 和 7.5 支持 macOS 的 OpenMP (仅限命令行) 新增了几个新属性和属性初始化器 CPack 可读取 CMAKE_PROJECT_VERSION 变量 CMake 3.13:连接控制

可以在Windows创建符号链接了!新增了许多新函数,响应了 CMake 的主流请求,如 add_link_options, target_link_directories 和 target_link_options。可以在源目录之外对目标进行更多的修改,可以更好的实现文件分离。target_sources 终于可以正确地处理相对路径(策略76)了。

首次发布于 2018年11月20日 新增 ctest --progress 选项,输出实时测试进度 新增 target_link_options 和 add_link_options 新增 target_link_directories 创建符号链接 -E create_symlink,只支持 Windows Windows 支持 IPO 可对源目录和构建目录使用 -S 和 -B 可对当前目标外的目录使用 target_link_libraries 和 install 新增 STATIC_LIBRARY_OPTIONS 属性 target_sources 现在相对于当前源目录(CMP0076) 若使用 Xcode,可以实验性地设置 schema 字段 CMake 3.14:文件工具 (AKA CMake π)

进行了很多小清理,包括几个用于文件的工具。生成器表达式可以在更多的地方使用,使用 list 要优于使用空变量。很多的 find 包可以产生目标。Visual Studio 16 2019 生成器与旧版本略有不同。不支持 Windows XP 和Vista。

首次发布于 2019年3月14日 --build 命令添加了 -v/--verbose 选项。若构建工具支持,可以使用冗余构建 FILE指令新增了 CREATE_LINK,READ_SYMLINK 和 SIZE 选项 get_filename_component 新增了 LAST_EXT 和 NAME_WLE 用于获取文件最后的扩展名,比如可以从文件名 version.1.2.zip ,获取后缀名 .zip (非常方便!) 可以在 if 语句中使用 DEFINED CACHE{VAR},查看是否在 CACHE 中定义了变量。 新增 BUILD_RPATH_USE_ORIGIN,以改进对构建目录中 RPath 的处理。 CMake 服务器模式使用一个文件 API 所取代。从长远来看,这会影响 IDE。 CMake 3.15:升级CLI

这个版本有许多较小改进,包括对CMake命令行的改进,比如:通过环境变量控制默认生成器(现在很容易将默认生成器改为 Ninja)。--build 模式支持多个目标,添加了 --install 模式。CMake支持多级日志记录。可以使用一些方便的工具来测试生成器表达式。FindPython 模块持续改进,FindBoost 与 Boost 1.70 的新 CONFIG 模块有了更多的内联。export(PACKAGE) 发生了巨大变化,不再将默认目录设置为 $HOME/.cmake (若 cmake 最小版本为 3.15+),若用户若想使用它,需要额外的设置步骤。

首次发布于 2019年7月17日 新增控制默认生成器的环境变量 CMAKE_GENERATOR 命令行可构建多个目标,cmake . --build --target a b --target 可缩写为 -t 项目安装支持命令行选项 cmake . --install,该过程不使用构建系统 支持日志级别参数 --loglevel,为 message 指令添加 NOTICE,VERBOSE,DEBUG和 TRACE选项 list 指令新增了 PREPEND、POP_FRONT和 POP_BACK 选项 execute_process 指令新增了 COMMAND_ECHO 选项(CMAKE_EXECUTE_PROCESS_COMMAND_ECHO) 可以在运行命令之前自动显示具体命令 Ninja 的几个改进,包括对 SWIFT 语言的支持 改进编译器和列表的生成器表达式 CMake 3.16:统一构建

添加了统一构建模式,允许源文件合并成单独的构建文件。增加了对预编译头文件的支持(可能是为 C++20 的模块做准备),完成了对许多小功能的修复,特别是对较新的特性,如 FindPython、FindDoxygen 等。

首次发布于 2019年11月26日 新增对 Objective C 和 Objective C++ 语言的支持 使用 target_precompile_headers 支持预编译头文件 支持使用 “Unity” 或 “Jumbo” 构建时(合并源文件)使用 CMAKE_UNITY_BUILD CTest:展开列表,可跳过基于正则表达式的方式 控制 RPath 的几个新特性。 生成器表达式可以在更多地方使用,比如构建和安装路径 可以通过新变量显式地控制查找位置 CMake 3.17:原生支持CUDA

添加了 FindCUDAToolkit,允许在不启用 CUDA 语言的情况下,查找和使用 CUDA 工具包!CUDA 现在更具可配置性,例如:链接到动态库。其他功能做了很多优化,比如:FindPython。并且,可以一次性遍历多个列表。

首次发布于 2020年3月20日 CUDA_RUNTIME_LIBRARY 终于可以设置为 Shared! 新增 FindCUDAToolkit cmake -E rm 替换旧的删除命令 添加 CUDA 元特性,如cuda_std_03等。 --debug-find 可跟踪包的搜索 ExternalProject 可以禁用递归签出 FindPython 更好地与 Conda 集成 DEPRECATION 可以应用于目标 新增 rm 命令 几个新的环境变量 foreach 新增 ZIP_LISTS 选项(一次性遍历多个列表) CMake 3.18:CUDA与Clang & CMake宏特性

CUDA 现在支持 Clang (不可分离编译)。新增了 CUDA_ARCHITECTURES 属性,可以更好地支持针对 CUDA 硬件。cmake_language 命令支持从字符串中使用 cmake 命令和表达式。还有许多其他元特性的变化,可以使新功能可用:通过变量调用函数,解析字符串,并使用字符串配置文件。还有许多其他漂亮的小功能添加和功能修复,下面是其中的一些。

首次发布于 2020年7月15日 cmake 命令可使用 cat 合并多个文件 新增 cmake 命令的分析模式 cmake_language 新增 CALL 和 EVAL 选项 若需多次导出,可使用 export 的 APPEND 选项(CMake 3.18+) 可以使用 file() 进行打包 若需要替换文件中的字符串,file(CONFIGURE 是比 configure_file 更好的方式 其他 find_* 命令新增了 find_package 的 REQUIRED 标志 为 list(SORT 新增了 NATURAL 比较模式 新增处理 DIRECTORY 作用域属性的多个选项 新增 CUDA_ARCHITECTURES 新增 LINK_LANGUAGE 生成器表达式(包括 DEVICE/HOST 版本) 源目录可以成为 FetchContent 的子目录 CMake 3.19:预设

可以以 JSON 的方式添加预设,用户将获得预设的默认值。find_package 支持版本范围,特殊的查找模块,比如:FindPython,有对版本范围的自定义支持。添加了许多新的权限控制,进一步的普及生成器表达式。

首次发布于 2020年11月18日 CMake预设文件 —— 可以为每个生成器的项目设置默认值,或者用户可以进行预设。即使当前项目没有使用 CMakePresets.json ,也可将CMakeUserPresets.json 添加到 .gitignore 中。 XCode 12+ 中引入了新的构建系统 支持 MSVC 对 Android 的构建 新增 cmake -E create_hardlink add_test 正确地支持测试名称中的空格 可将 cmake_language 中标记为 DEFER 的目录放在最后进行处理 大量新 file 选项,如临时下载和 ARCHIVE_CREATE 的 COMPRESSION_LEVEL find_package 支持版本范围 DIRECTORY 可以在属性命令中包含二进制目录 string 新增 JSON 模式 新 OPTIMIZE_DEPENDENCIES 属性和 CMAKE_* 变量可智能地删除静态库和对象库的依赖项。 PCH 支持 PCH_INSTANTIATE_TEMPLATES 属性和 CMAKE_* 变量。 检查模块支持 CUDA 和 ISPC 语言 FindPython:新增 Python*_LINK_OPTIONS ctest 的 compute-sanitizer 支持 CUDA 的 memcheck CMake 3.20:文档

CMake 文档通过添加 “new in” 标签来快速查看添加的内容,无需切换文档版本,提高了工作效率!新增 C++23 的支持。源文件必须列出扩展名,并且始终遵循设置的 LANGUAGE 规则。还做了相当多的清理工作(为了使 工程部署的阻碍最小化,最好使用版本 ...3.20 对源码进行测试),继续改进预设。

首次发布于 2021年3月23日 支持 C++23 新增 CUDAARCHS 环境变量,用于设置 CUDA 架构 支持新的 IntelLLVM 编译器(OneAPI 2021.1)和 NVHPC的 NVIDIA HPC SDK 一些扩展生成器表达式支持自定义命令/目标,可在安装时重命名 新增的 cmake_path 命令可用于路径 try_run 新增了 WORKING_DIRECTORY 选项 file(GENERATE 添加了很多特性 一些功能或特性的移除,如 cmake-server, WriteCompilerDetectionHeader(若策略设置为3.20+),以及一些可用新方法替代的东西。 源文件必须包含扩展名 CMake 3.21:配色

不同的消息类型有不同的颜色!现在有变量可以查看是否在顶级项目中。大量有关持续清理和特化的新特性,如添加HIP语言和C17和C23支持。继续改进预设。

首次发布于 2021年7月14日 初步支持 MSVC 2022 为 make 和 ninja 添加了 CMAKE_


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3