唯一靠谱解法是升级cmake至3.20+,不可修改cmake_minimum_required;因项目依赖cmp0115、cmp0118等策略,旧版解析逻辑不同,绕过检查将导致构建不一致或静默失败,ubuntu 20.04需用官方二进制包覆盖安装并正确配置软链接与path。

直接升级到 3.20+ 是唯一靠谱解法,别改 cmake_minimum_required —— 那不是降级兼容,是埋雷。
为什么不能跳过版本检查?
报错信息 CMake 3.20 or higher is required. You are running version 3.16.3 不是警告,是硬性拦截。项目用了 CMP0115(强制显式声明源文件扩展名)或 CMP0118(GENERATED 文件跨目录处理)等策略,旧版 CMake 解析逻辑不同,强行绕过会导致构建结果不一致甚至静默失败。
常见误操作包括:
- 把
cmake_minimum_required(VERSION 3.20)改成3.16—— 项目依赖的第三方库(如 Fast-DDS、vcpkg manifest 模式)可能已弃用旧策略 - 用
sudo apt install cmake升级 —— Ubuntu 22.04 默认源只提供 3.22.1,20.04 更老(3.16.3),无法满足 3.20+ 要求
Ubuntu/Debian 推荐:用官方二进制包覆盖安装
比源码编译快 10 倍,无依赖冲突,不污染系统头文件。以升级到 cmake-3.31.7 为例:
- 下载并运行安装脚本:
curl -LO https://cmake.org/files/v3.31/cmake-3.31.7-linux-x86_64.sh && sudo bash cmake-3.31.7-linux-x86_64.sh --skip-license --prefix=/usr/local - 确认新二进制位置:
/usr/local/bin/cmake(不是/usr/bin/cmake) - 替换软链接:
sudo ln -sf /usr/local/bin/cmake /usr/bin/cmake - 验证:
cmake --version应输出cmake version 3.31.7
注意:如果之前用 apt 安装过 cmake,sudo apt remove cmake 会连带卸载依赖它的包(如 build-essential),不建议执行。
CentOS/RHEL 系统:优先用 cmake3 命令 + 别名
系统自带仓库通常只提供 cmake3(如 CentOS 7 的 3.21.1),它和系统 cmake(2.8.x)共存:
- 直接运行:
cmake3 ..替代cmake .. - 设别名避免手误:
echo "alias cmake=cmake3" >> ~/.bashrc && source ~/.bashrc - 验证:
cmake --version此时应显示cmake3版本
不要用 update-alternatives 强行切换系统默认 cmake,某些工具链(如 ROS 1)仍硬编码调用 /usr/bin/cmake,会出兼容问题。
多版本共存时 PATH 和软链接最容易踩坑
装完新版后 which cmake 还指向旧路径,大概率是以下两个原因:
-
/usr/local/bin不在$PATH前置位(尤其 zsh 用户需检查~/.zshrc是否漏加export PATH="/usr/local/bin:$PATH") -
/usr/bin/cmake是硬链接而非软链接,ln -sf失效,需先sudo rm /usr/bin/cmake再重建
最终效果必须是:cmake --version 和 which cmake 输出一致,且指向你刚安装的版本。任何“看起来升级了但实际没生效”的情况,90% 出在路径或链接上。











