自动化建构系统-CMake
2014-06-17 09:50:55 阿炯

CMake 是一个跨平台的自动化建构系统,它使用一个名为 CMakeLists.txt 的文件来描述构建过程,可以产生标准的构建文件,如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces。文件 CMakeLists.txt 需要手工编写,也可以通过编写脚本进行半自动的生成。CMake 提供了比 autoconfig 更简洁的语法,采用BSD协议授权。


CMake, the cross-platform, open-source build system. CMake is a family of tools designed to build, test and package software. CMake is used to control the software compilation process using simple platform and compiler independent configuration files. CMake generates native makefiles and workspaces that can be used in the compiler environment of your choice.


最新版本:3.6
3.16.6 已经发布,该版本更新内容如下:
Makefiles:修复 GNU make 4.3 的嵌套调用的 silencing
target_link_libraries:修复 $ genex 情况下的回归
AIX:安装具有执行权限的 ExportImportList 脚本
GetPrerequisites:将 vcruntime 库分类为 system
libuv:添加对在 IBM i(OS400)上构建的支持
FindPython:修复 FIND_VIRTUALENV == FIRST 时的处理
Swift:修复带空格的库搜索路径引用
cmstd:删除 IBM i(OS400)的 -isystem 选项

最新版本:3.18
3.18.2 中的一些重要变更有:
AutoGen:修复自定义命令的过度指定直接依赖项
AutoGen:添加测试以检查正确的 AutoMoc 依赖项
FindMPI:修复 pthread guard 中的回归
FPHSA:检测 find 模块之间的 inclusion
Tests:从调用者环境中隔离 RunCMake.FindPkgConfig
FindRuby:恢复兼容性变量 RUBY_INCLUDE_PATH
PCH:使用 REUSE_FROM 避免 MSBuild 生成器不必要的 30s 延迟。
更多详细信息可查看更新说明

最新版本:3.20
3.20.3 已经于2021年5月30日发布,主要更新内容:
在 IDE 集成指南中使用相对路径链接到预设模式
使用更私密的临时变量名
增加对 Boost 1.76 的支持
在符号链接的构建树中恢复对 Fortran 的支持
更新 Sphinx 4 的手册页面配置
如果更新到还没有的哈希值,确保 git fetch
只在 git 1.7.7 或更高版本中添加 git 配置设置
通过配置分割长命令行
在生成时检查 EXCLUDE_FROM_ALL 属性
改进 nvcc 详细输出中的 CUDA Toolkit root 的正则表达式
正确地记录解析失败的情况
提供更多语法错误信息
更多详情请查看发行公告
 
最新版本:3.24
3.24.0 已于2022年8月上旬发布,一些亮点更新内容如下:
“FetchContent” 模块和 “find_package ()” 命令现在支持集成功能。
添加了 “LINK_LIBRARY” 生成器表达式以管理在链接步骤中指定库的方式。
使用 VS 2019 Update 11 或更高版本时,Visual Studio Generators 现在支持 “SYSTEM” headers。
"cmake (1)" 获得了 "-fresh" 命令行选项, 以便在配置 build tree 时删除任何现有的 "CMakeCache.txt" 文件和关联的 "CMakeFiles/" 目录, 从而开始新的配置, 就好像 build tree 是新创建的一样。
添加了 “CMAKE_COMPILE_WARNING_AS_ERROR” 变量和相应的 “COMPILE_WARNING_AS_ERROR” 目标属性,以便在编译时使用特定的编译器标志,将 warnings 视为 errors,例如 “-Werror”。
“find_file ()”、“find_path ()”、“find_library ()”、“find_program ()” 和 “find_package ()” 命令获得了 “NO_CMAKE_INSTALL_PREFIX” 选项来控制搜索 “CMAKE_INSTALL_PREFIX”。
“find_file ()”、“find_path ()”、“find_library ()”、“find_program ()” 和 “find_package ()” 命令能够指定必须查询哪些 Windows Registry 视图。

最新版本:3.28
3.28.0 现已于2023年12月上旬发布,一些亮点更新内容如下:
1.Ninja Generators 和 Visual Studio Generators for VS 2022 及更新版本,结合 MSVC 14.34 工具集(随 VS 17.4 提供)及更新版本、LLVM/Clang 16.0 及更新版本,以及 GCC 14(2023-09-20 每日更新后)及更新版本,现在都支持 C++ 20 命名模块。详情可参阅 "cmake-cxxmodules (7)"。
2.现在可以使用 NVIDIA CUDA Compiler (NVCC) 为 NVIDIA GPU 编译 “HIP” 语言代码。参阅 “CMAKE_HIP_PLATFORM” 变量。
3.在 Apple 平台上,现在支持 “.xcframework” 文件夹。
4.自 CMake 3.0 起已弃用的 “exec_program ()” 命令已被 policy “CMP0153” 删除。请改用 “execute_process ()” 命令。
5.使用文件集的目标中生成的文件现在默认被视为私有。生成的 public headers 必须使用文件集指定。这使得 Ninja Generators 能够生成更高效的构建图。参见政策 “CMP0154”。
6.“find_library ()”、“find_path ()” 和 “find_file ()” 命令不再搜索从 “PATH” 环境变量派生的安装前缀。此行为是在 CMake 3.3 中添加的,以支持 Windows 上的 MSYS 和 MinGW(“MSYSTEM”)开发环境,但它可以出于不相关的原因搜索恰好位于 “PATH” 中的不需要的前缀。在 “PATH” 中保留一些 “<prefix>/bin” 目录只是为了他们的工具的用户,不一定希望搜索任何相应的 “<prefix>/lib”“<prefix>/include” 目录。CMake 3.6 已针对非 Windows 平台恢复了该行为。现在它也已在 Windows 平台上恢复。

最新版本:3.30
v3.30.0 现已于2024年7月上旬发布,一些亮点更新内容如下:
“cmake-presets (7)” 文件现在支持 schema version “9”。 “include” 字段现在扩展除 “$env {}” 和 preset-specific 宏(即从预设定义内的字段派生的宏)之外的所有宏。
“Compile Features” 功能现在实现了对 “cxx_std_26” 和 “cuda_std_26” meta-features 的支持,以表明编译器模式必须至少为 C++26。这些 meta-features 最初由 CMake 3.25 记录,但尚未完全实现。
添加了 “CMAKE_<LANG>_STANDARD_LATEST”,用于描述 CMake 为所选编译器支持的最新 "<LANG>" 语言标准。
添加了 “CMAKE_TLS_VERSION” 变量和 “CMAKE_TLS_VERSION” 环境变量,用于指定通过 "file (DOWNLOAD)" 和 "file (UPLOAD)" 命令连接到 "https://"URL 时的默认最低 TLS 版本。
“GENERATED” 源文件属性现在在所有目录中都可见。参阅策略 “CMP0163”。策略 “CMP0118” 的文档已修订,以描述其实际效果。
Windows 上的 “FindPython”、“FindPython2” 和 “FindPython3” 模块现在为 Python 调试变体提供了更好的支持。
“TARGET_PROPERTY” 生成器表达式学会了评估由新的 “TRANSITIVE_COMPILE_PROPERTIES” 和 “TRANSITIVE_LINK_PROPERTIES” 目标属性定义的自定义传递属性 。
“CPack WIX Generator” 已获得对 WiX Toolset v4 的支持。参阅 “CPACK_WIX_VERSION” 变量。
已根据策略 “CMP0167” 删除了 “FindBoost” 模块。将项目移植到上游 Boost 的 “BoostConfig.cmake” 包配置文件,现在 “find_package (Boost)” 会搜索该文件。
cmake.org 上提供的预编译 Windows“.msi” 安装程序在执行全新安装时,现在会默认修改系统范围的 “PATH”。
更多详情可查看发行公告

最新版本:4
v4.0.0 现已于2025年4月上旬发布,一些亮点更新内容如下:
添加了 “CMAKE_POLICY_VERSION_MINIMUM” 变量,以帮助 packagers 和 end users 尝试配置尚未更新的现有项目以使用受支持的 CMake 版本。添加了 “CMAKE_POLICY_VERSION_MINIMUM” 环境变量以对其进行初始化。

“$<PATH>” 生成器表达式获得了 “NATIVE_PATH” 操作,将 CMake 路径转换为 native 路径。

已删除与 3.5 版之前的 CMake 版本的兼容性。现在,调用 “cmake_minimum_required ()” 或 “cmake_policy ()” 将 policy 版本设置为较旧值时会发出错误。注意,调用这些命令仍可通过使用其 “VERSION” 参数的 “<min>…<max>” 语法来支持较旧版本的 CMake。这只需要 “<min>” 版本的 CMake,但在运行较新版本时,将 policy 设置为 “<max>” 版本。

在具有 Ninja Generators 和 Makefile Generators 的 macOS 上,当在 “/usr/bin” 中找到编译器时,它现在按原样使用,不再映射到 Xcode 内的相应编译器。

针对 macOS 的构建不再默认选择任何 SDK 或将 “-isysroot” flag 传递给编译器。相反,编译器应该自行选择默认的 macOS SDK。要使用不这样做的编译器,用户现在必须在配置构建时指定 “-DCMAKE_OSX_SYSROOT=macosx”。

预编译的 SunOS sparc64 和 x86_64 二进制文件现在在 cmake.org 上提供。更多详情可查看发行公告


官方主页:http://www.cmake.org/