保存时间:2026/4/8 08:40:12
https://github.com/Kitware/CMake
# 克隆仓库(推荐,可获取完整版本历史)
git clone https://github.com/Kitware/CMake.git
# 进入源码目录
cd CMake
# Ubuntu/Debian 系统安装依赖
sudo apt update
sudo apt install -y build-essential libssl-dev libcurl4-openssl-dev libarchive-dev \
libuv1-dev git cmake # 注意:编译 CMake 本身需要先有一个可用的 CMake
说明:编译 CMake 必须先有一个已安装的 CMake(最低版本要求可参考仓库的README),如果系统自带的 CMake 版本过低,可先通过包管理器升级,或下载预编译版本临时使用。
mkdir build && cd build
# 基础配置(默认安装到 /usr/local)
cmake .. -DCMAKE_BUILD_TYPE=Release
# 可选:指定安装路径(如安装到 ~/cmake-install)
# cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$HOME/cmake-install
# 例如4核CPU,使用 -j4
make -j$(nproc)
# 本地安装(无sudo,需提前指定CMAKE_INSTALL_PREFIX)
make install
# 系统级安装(需sudo,安装到 /usr/local)
# sudo make install
# 验证版本(如果是本地安装,需先将安装目录的bin加入PATH)
cmake --version
https://github.com/Kitware/CMake,优先用 git clone 获取完整源码。cmake-xxx-Linux-x86_64.tar.gz),4.0 以上版本任选(比如当前最新的 3.29+ 远高于 4.0?注:CMake 最新稳定版是 3.x 系列,目前最高为 3.29,不存在 4.0+ 版本,你应该是笔误,3.x 已完全满足所有现代项目需求)。# 下载预编译包(替换版本号即可)
wget https://github.com/Kitware/CMake/releases/download/v3.29.6/cmake-3.29.6-Linux-x86_64.tar.gz
# 解压到 /opt 目录(系统级安装,推荐)
sudo tar -zxvf cmake-3.29.6-Linux-x86_64.tar.gz -C /opt/
# 重命名为 cmake-latest(方便后续使用)
sudo mv /opt/cmake-3.29.6-Linux-x86_64 /opt/cmake-latest
# 临时生效(当前终端)
export PATH=/opt/cmake-latest/bin:$PATH
# 永久生效(所有终端,推荐)
echo 'export PATH=/opt/cmake-latest/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
cmake --version
cmake version 3.29.6 即表示安装成功,版本远高于 4.0(注:CMake 3.x 是主流版本,功能完全覆盖 4.0 需求,官方暂无 4.0 版本)。# 添加 CMake 官方 PPA
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:kitware/cmake-3.28 -y
sudo apt update
# 安装新版 CMake(自动替换系统旧版本)
sudo apt install -y cmake
/opt 并配置环境变量,适配所有 Ubuntu 版本。cmake: command not found,检查环境变量是否配置正确,或直接使用绝对路径 /opt/cmake-latest/bin/cmake 执行。Could not find CMAKE_ROOT 意味着 CMake 程序能被执行,但它找不到自己的核心配置文件和模块目录(本该在 /usr/local/share/cmake-3.22 里,但这个目录要么缺失、要么文件损坏)。/usr/local/share/cmake-3.22 目录权限异常或被误删除。# 1. 卸载系统中可能残留的 CMake 版本
sudo apt remove --purge -y cmake
sudo rm -rf /usr/local/share/cmake-3.22 # 删除损坏的目录
sudo rm -rf /usr/local/bin/cmake /usr/local/bin/cpack /usr/local/bin/ctest # 删除残留可执行文件
# 2. 下载最新稳定版预编译包(以 3.29.6 为例,适配所有 Ubuntu)
cd ~/Downloads
wget https://github.com/Kitware/CMake/releases/download/v3.29.6/cmake-3.29.6-Linux-x86_64.tar.gz
# 3. 解压到系统目录,建立软链接(全局可用)
sudo tar -zxvf cmake-3.29.6-Linux-x86_64.tar.gz -C /opt/
sudo ln -sf /opt/cmake-3.29.6-Linux-x86_64/bin/* /usr/local/bin/
# 4. 验证是否修复
cmake --version
cmake version 3.29.6,说明 CMake 已正常安装。# 假设你解压的预编译包在 /opt/cmake-3.29.6-Linux-x86_64
export CMAKE_ROOT=/opt/cmake-3.29.6-Linux-x86_64/share/cmake-3.29
# 再重新执行 cmake
cmake ..
.bashrc 或 .profile 里有手动配置的 CMake 路径,可能导致冲突:# 查看当前 CMake 相关环境变量
echo $CMAKE_ROOT
echo $PATH | grep cmake
# 如果输出异常,清空错误的环境变量
unset CMAKE_ROOT
# 重新加载 bash 配置
source ~/.bashrc
cd ~/Downloads/h3mtxt/build
rm -rf * # 清空旧的损坏缓存
cmake .. # 重新配置
Could not find CMAKE_ROOT 错误,而是正常开始解析项目的 CMakeLists.txt,说明问题已解决。/usr/local/share/cmake-3.22 目录,通过软链接让新 CMake 全局可用。jsoncpp 和 zlib 这两个第三方库的源码没有被下载到 thirdparty 目录中,导致 CMake 找不到对应的 CMakeLists.txt 文件,进而无法构建这些依赖库。我会教你两种方法解决这个问题,优先推荐最规范的 “子模块初始化” 方式。thirdparty/jsoncpp 和 thirdparty/zlib 大概率是通过 Git 子模块 管理的(GitHub 项目常用的依赖管理方式),你下载项目源码时只拿到了主项目文件,没有拉取这些子模块的实际代码,所以目录是空的 / 缺少关键文件。git clone 下载的,直接执行以下命令拉取所有子模块:# 进入项目根目录(不是 build 目录)
cd ~/Downloads/h3mtxt
# 初始化并拉取所有子模块(包括 jsoncpp 和 zlib)
git submodule init
git submodule update
# 回到 build 目录重新执行 cmake
cd build
cmake ..
mkdir -p ~/Downloads/h3mtxt/thirdparty
# 进入 thirdparty 目录
cd ~/Downloads/h3mtxt/thirdparty
# 克隆 jsoncpp 官方仓库(或下载稳定版)
git clone https://github.com/open-source-parsers/jsoncpp.git
# 可选:切换到稳定版本(避免最新版兼容性问题)
cd jsoncpp
git checkout 1.9.5
cd ..
# 克隆 zlib 官方仓库
git clone https://github.com/madler/zlib.git
# 可选:切换到稳定版本
cd zlib
git checkout v1.3.1
cd ../..
# 回到 build 目录
cd build
cmake ..
git submodule update 时提示 “没有子模块配置”,说明该项目的依赖不是通过子模块管理的,直接用方法 2 手动下载即可。git submodule init/update 拉取项目自带的子模块依赖,适配性最好。thirdparty 目录,补齐缺失的依赖文件。thirdparty/jsoncpp 和 thirdparty/zlib 目录下有完整的源码(包含 CMakeLists.txt),再重新执行 cmake ..。