Ubuntu下不卸载系统CMake额外安装高版本CMake的方案问询
该需求完全可以实现,以下提供两种适配不同场景的操作方案:
方案1:使用update-alternatives管理多版本CMake(和管理gcc的逻辑完全一致)
适合需要频繁在不同CMake版本间切换的场景,操作步骤如下:
- 下载对应版本的CMake预编译二进制包(无需源码编译,节省时间,建议选择
linux-x86_64.tar.gz格式的官方预编译包) - 将压缩包解压到非系统默认路径,比如
/opt/cmake目录:
sudo mkdir -p /opt/cmake sudo tar zxf cmake-3.20.0-linux-x86_64.tar.gz -C /opt/cmake
- 将高版本CMake加入update-alternatives管理列表:
sudo update-alternatives --install /usr/bin/cmake cmake /opt/cmake/cmake-3.20.0-linux-x86_64/bin/cmake 100 sudo update-alternatives --install /usr/bin/ccmake ccmake /opt/cmake/cmake-3.20.0-linux-x86_64/bin/ccmake 100 sudo update-alternatives --install /usr/bin/cpack cpack /opt/cmake/cmake-3.20.0-linux-x86_64/bin/cpack 100 sudo update-alternatives --install /usr/bin/ctest ctest /opt/cmake/cmake-3.20.0-linux-x86_64/bin/ctest 100
- 切换版本时执行以下命令,选择对应版本编号即可:
sudo update-alternatives --config cmake
默认选择系统自带的3.10.2版本即可保证ROS环境正常运行,需要用高版本时手动切换即可。
方案2:仅针对单个编译任务临时指定高版本CMake(更适配当前场景,无全局影响)
如果你只需要编译这一个特定库时用高版本CMake,不需要频繁切换版本,可以选择该方案,完全不会修改系统全局配置,不会对ROS环境产生任何影响:
- 同样先下载高版本CMake预编译包,解压到任意路径,比如当前用户的home目录下的工具文件夹:
~/tools/cmake-3.20.0-linux-x86_64 - 编译该库时,直接调用高版本CMake的绝对路径即可,后续编译步骤不变:
# 进入你的源码编译目录后执行 ~/tools/cmake-3.20.0-linux-x86_64/bin/cmake .. make
如果是编译ROS工作空间的包,用catkin_make时也可以直接指定CMake路径:
catkin_make -DCMAKE_PROGRAM_PATH=~/tools/cmake-3.20.0-linux-x86_64/bin
注意:不要卸载系统自带的cmake包,ROS大量核心组件依赖系统默认cmake版本,卸载后会导致ROS功能异常,上述两种方案均可完全避免该问题。
内容的提问来源于stack exchange,提问作者Oroshimaru
相关产品推荐
相关产品推荐

