在Ubuntu Linux中更新CMake且不影响ROS2 Galactic安装
Ubuntu下升级CMake到3.27.7且不影响ROS2 Galactic的可行方案
方法一:使用官方预编译.sh安装包(推荐)
你已下载的官方.sh包是最便捷的方式,无需编译,只需自定义路径安装并隔离环境:
确认系统默认CMake路径(ROS2依赖的版本):
which cmake输出应为
/usr/bin/cmake,这个版本绝对不能卸载。给安装包添加执行权限:
chmod +x cmake-3.27.7-linux-x86_64.sh自定义路径安装(避免覆盖系统文件),例如安装到用户目录下的
local文件夹:./cmake-3.27.7-linux-x86_64.sh --prefix=~/local/cmake-3.27.7 --exclude-subdir参数说明:
--prefix:指定安装根目录,可根据需求修改--exclude-subdir:避免在安装目录下创建额外的版本子目录,直接将文件放到指定路径中
配置环境变量,让系统优先调用新版本:
- 临时生效(当前终端会话):
export PATH=~/local/cmake-3.27.7/bin:$PATH - 永久生效(所有终端会话):
编辑~/.bashrc或~/.zshrc(根据你使用的shell),添加以下内容:
保存后执行生效:export PATH=~/local/cmake-3.27.7/bin:$PATHsource ~/.bashrc
- 临时生效(当前终端会话):
验证安装:
cmake --version输出应显示
cmake version 3.27.7,同时系统原有的/usr/bin/cmake仍可正常调用。
方法二:源码编译安装(解决bootstrap执行失败问题)
如果预编译包无法满足需求,可通过源码编译,使用系统原有CMake完成bootstrap:
安装编译依赖:
sudo apt install build-essential libssl-dev解压CMake源码包(若未下载,可从cmake官网获取对应版本源码压缩包):
tar -xvf cmake-3.27.7.tar.gz && cd cmake-3.27.7执行bootstrap(使用系统默认CMake,指定自定义安装路径):
./bootstrap --prefix=~/local/cmake-3.27.7注:之前bootstrap失败大概率是缺少编译依赖,或未指定
--prefix导致尝试覆盖系统文件。编译并安装:
make -j$(nproc) make install-j$(nproc)表示使用所有CPU核心加速编译。同样按照方法一的步骤配置环境变量,验证安装。
关键注意事项
- 永远不要卸载系统默认的
/usr/bin/cmake,否则ROS2 Galactic会被连带卸载。 - 编译ROS2包时,若需使用系统原版本CMake,可临时取消环境变量:
或直接指定CMake路径给colcon:unset PATH source /opt/ros/galactic/setup.bashcolcon build --cmake-executable /usr/bin/cmake - 若仍出现
CMAKE_ROOT错误,检查环境变量是否正确配置,确保~/local/cmake-3.27.7/bin在PATH最前面,且安装目录下存在share/cmake-3.27模块文件夹。
内容的提问来源于stack exchange,提问作者useeeeer132
相关产品推荐
相关产品推荐

