当前位置: 首页 > news >正文

如何在一台 Linux 机器上管理不同版本的 CMake

目录
  • 🧩 为什么需要多版本 CMake?
  • ✅ 核心原则
  • 📦 步骤 1:下载并安装多个 CMake 版本(推荐预编译包)
    • 1.1 创建安装目录
    • 1.2 下载预编译二进制包
    • 1.3 复制到目标目录
  • 🔗 方法一:使用 update-alternatives 管理(推荐|系统级)
    • 添加两个版本:
    • 切换版本:
    • 验证:
  • 🧩 方法二:使用 Shell 函数快速切换(推荐|个人开发)
    • 编辑 ~/.bashrc~/.zshrc
    • 重新加载配置:
    • 使用示例:
  • 🛠️ 方法三:直接调用全路径(CI/CD 最佳实践)
  • 🔄 升级与维护
    • 添加新版本(如 CMake 3.28.0):
    • 删除旧版本:
  • 🧪 验证你的设置
  • 📌 最佳实践建议
  • 🎯 总结


在现代 C++ 开发中,CMake 已成为事实上的构建系统标准。然而,随着项目复杂度增加,开发者常常面临一个现实问题:不同的项目依赖不同版本的 CMake

  • 某个项目要求 CMake ≥ 3.20
  • 另一个遗留项目只能在 CMake 3.16 下正常工作
  • CI/CD 环境需要测试多个 CMake 版本的兼容性

幸运的是,在一台 Linux 机器上安全、高效地管理多个 CMake 版本是完全可行的。本文将为你提供一套完整、实用、可扩展的解决方案。


🧩 为什么需要多版本 CMake?

场景 说明
项目兼容性 老项目使用旧语法或模块,新版 CMake 可能报错
功能需求 新项目使用 target_link_optionsfind_package(XXX CONFIG) 等新特性,需高版本支持
CI/CD 测试 需验证代码在多个 CMake 版本下的构建稳定性
团队协作 不同开发人员可能使用不同环境,统一版本管理至关重要

✅ 核心原则

在开始之前,请牢记以下三点:

  1. 不要直接替换 /usr/bin/cmake
    • 可能破坏系统包依赖(如 rpm-build
  2. 每个版本独立存放
    • 推荐路径:/opt/cmake-<version>
  3. 通过工具或脚本动态切换
    • 使用 update-alternatives 或 shell 函数控制默认版本

📦 步骤 1:下载并安装多个 CMake 版本(推荐预编译包)

我们以 CMake 3.20.5CMake 3.27.9 为例。

1.1 创建安装目录

sudo mkdir -p /opt/cmake-3.20.5
sudo mkdir -p /opt/cmake-3.27.9

💡 提示:你也可以安装更多版本,如 3.16.83.25.3 等。

1.2 下载预编译二进制包

cd /tmp# 下载 CMake 3.20.5
wget https://cmake.org/files/v3.20/cmake-3.20.5-linux-x86_64.tar.gz
tar -xzf cmake-3.20.5-linux-x86_64.tar.gz# 下载 CMake 3.27.9
wget https://cmake.org/files/v3.27/cmake-3.27.9-linux-x86_64.tar.gz
tar -xzf cmake-3.27.9-linux-x86_64.tar.gz

1.3 复制到目标目录

# 安装 3.20.5
sudo cp -r cmake-3.20.5-linux-x86_64/* /opt/cmake-3.20.5/# 安装 3.27.9
sudo cp -r cmake-3.27.9-linux-x86_64/* /opt/cmake-3.27.9/

⚠️ 注意:使用 cp 而非 mv,避免临时目录被清理后丢失文件。


🔗 方法一:使用 update-alternatives 管理(推荐|系统级)

Linux 的 update-alternatives 工具专为管理多版本程序设计。

添加两个版本:

sudo update-alternatives --install /usr/bin/cmake cmake /opt/cmake-3.20.5/bin/cmake 10
sudo update-alternatives --install /usr/bin/cmake cmake /opt/cmake-3.27.9/bin/cmake 20
  • 数字为优先级,越高越优先
  • 第一次运行会自动设置默认版本为 3.27.9

切换版本:

sudo update-alternatives --config cmake

输出示例:

There are 2 choices for the alternative cmake (providing /usr/bin/cmake).Selection    Path                                Priority   Status
------------------------------------------------------------
* 0            /opt/cmake-3.27.9/bin/cmake          20        auto mode1            /opt/cmake-3.20.5/bin/cmake          10        manual mode2            /opt/cmake-3.27.9/bin/cmake          20        manual modePress <enter> to keep the current choice[*], or type selection number:

输入编号即可切换。

验证:

cmake --version
# 输出当前选中的版本

优点

  • 系统级生效,所有用户可用
  • 支持 ctest, cpack 等工具自动同步
  • 命令行体验无缝切换

🧩 方法二:使用 Shell 函数快速切换(推荐|个人开发)

适合不想修改系统配置的开发者。

编辑 ~/.bashrc~/.zshrc

# CMake 多版本管理函数
cmake-use() {local version=$1local path="/opt/cmake-$version/bin"if [ -d "$path" ]; thenexport PATH="$path:$PATH"echo "✅ Using CMake $version"cmake --versionelseecho "❌ CMake version $version not found at /opt/cmake-$version"echo "Available versions:"ls /opt/ | grep ^cmake-fi
}

重新加载配置:

source ~/.bashrc
# 或 source ~/.zshrc

使用示例:

cmake-use 3.20.5
# ✅ Using CMake 3.20.5
# cmake version 3.20.5cmake-use 3.27.9
# ✅ Using CMake 3.27.9
# cmake version 3.27.9

💡 小技巧:可以写别名简化操作

alias cm320='cmake-use 3.20.5'
alias cm327='cmake-use 3.27.9'

🛠️ 方法三:直接调用全路径(CI/CD 最佳实践)

在自动化脚本中,建议显式指定 CMake 路径,避免环境不确定性。

# 构建项目时指定版本
/opt/cmake-3.27.9/bin/cmake -S . -B build-release
/opt/cmake-3.20.5/bin/cmake -S . -B build-compat# 运行测试
/opt/cmake-3.27.9/bin/ctest --test-dir build-release

优点

  • 完全可控,无环境干扰
  • 适合 Jenkins、GitLab CI、GitHub Actions

🔄 升级与维护

添加新版本(如 CMake 3.28.0):

sudo mkdir -p /opt/cmake-3.28.0
wget https://cmake.org/files/v3.28/cmake-3.28.0-linux-x86_64.tar.gz
tar -xzf cmake-3.28.0-linux-x86_64.tar.gz
sudo cp -r cmake-3.28.0-linux-x86_64/* /opt/cmake-3.28.0/# 注册到 alternatives
sudo update-alternatives --install /usr/bin/cmake cmake /opt/cmake-3.28.0/bin/cmake 30

删除旧版本:

sudo rm -rf /opt/cmake-3.16.8
# 从 alternatives 中移除(可选)
sudo update-alternatives --remove cmake /opt/cmake-3.16.8/bin/cmake

🧪 验证你的设置

# 查看当前版本
cmake --version# 查看链接来源
ls -l $(which cmake)# 检查所有已安装版本
ls /opt/cmake-*

📌 最佳实践建议

建议 说明
使用预编译包 快速、稳定、无需编译依赖
版本命名清晰 /opt/cmake-3.27.9/opt/cmake-new 更好
定期清理 删除不再使用的旧版本释放空间
文档化环境 README.md 中注明项目所需 CMake 版本
结合 devtoolset scl enable devtoolset-11 bash 中使用高版本 CMake 构建 C++17/20 项目

🎯 总结

在一台 Linux 机器上管理多个 CMake 版本不仅可行,而且是专业开发的必备技能。通过合理组织目录和使用合适的切换机制,你可以:

  • ✅ 轻松支持新旧项目共存
  • ✅ 提高开发效率和构建可靠性
  • ✅ 实现 CI/CD 中的多版本测试

核心口诀

独立安装,统一管理,按需切换

无论你是个人开发者还是团队负责人,掌握这套方法,都能让你在复杂的构建环境中游刃有余。


📌 延伸阅读

  • CMake 官方下载页
  • update-alternatives 手册
  • CMake Minimum Version 兼容性指南

现在,就去为你的 Linux 机器装上多个 CMake 版本,开启高效开发之旅吧!🚀

http://www.hskmm.com/?act=detail&tid=38286

相关文章:

  • 90 天打造可持续交付:12 条 DevOps 实践要点与避坑
  • CSharp: word,excel,powerpoint convert to pdf,hrml etc using Aspose.Office
  • 2025年新疆喀纳斯旅游服务权威推荐榜单:新疆/阿勒泰/禾木深度游旅行社综合评测
  • 一天一款实用的AI工具,第9期,AI转黏土风格
  • 2025 10 24日报
  • 题解:P8930 「TERRA-OI R1」神,不惧死亡
  • 2025 OSCAR丨与创新者同频!Apache RocketMQ 邀您共赴开源之约
  • 生产环节最容易出问题的三个点,老板必须盯紧
  • 2025年PSA制氮设备厂家权威推荐榜单:电解水制氢设备/氦气纯化系统/氘气回收纯化源头厂家精选
  • 解决git clone只有master分支的问题
  • 一文读懂循环神经网络(RNN):原理、局限与LSTM解决方案 - 指南
  • 2025年搬家纸箱权威推荐榜单:物流包装/电商纸箱/平口纸箱源头厂家精选
  • 大数据案例 -2025/10/24
  • 2025年阳台壁挂太阳能厂家权威推荐榜单:分体式阳台太阳能/阳台壁挂太阳能热水器/分体式阳台太阳能源头厂家精选
  • 使用C# 控制ethercat从站设备
  • 从价值直觉到价值理性:AI元人文演进路径解读
  • 0269-GRPC-使用 prost 编码
  • 0268-GRPC-prost 生成文件到目录
  • 0271-GRPC-prost 带长度的编解码
  • 2025 年坡口机源头厂家最新推荐排行榜:欧盟 CE 认证企业领衔,含 15 年工业服务经验品牌,自走式/自动/板材/管道坡口机厂家推荐
  • 0270-GRPC-使用 prost 解码
  • 完整教程:Java开发者进阶之路
  • 动手动脑4
  • python+request+unittest自动化测试
  • 2025 年保温涂料厂家最新推荐排行榜:聚焦技术专利与管理体系认证的优质品牌耐高温/防火耐热/防腐/纳米介孔微珠中空粒子保温涂料公司推荐
  • 2025年云南独立成团游公司权威推荐榜单:云南旅游团/云南私享之旅/云南专属行程游源头公司精选
  • 2025 年气凝胶生产厂家最新推荐排行榜:含气凝胶毡 / 粉 / 隔热板 / 保温罩 / 陶瓷板品牌,优质厂家推荐
  • 102302143郑泽雄第一次作业
  • 作业4
  • 2025年5.5KW工业吸尘器厂家权威推荐榜单:380V防爆吸尘器/7.5KW工业吸尘器/水浴式吸尘器源头厂家精选