Ubuntu 16.04 编译安装 CMake 3.25 完整教程 - 从源码构建到配置优化
前言
Ubuntu 16.04 LTS 是一个非常稳定的长期支持版本,但其官方软件源中的 CMake 版本较老(通常是 3.5.x)。对于需要新特性支持的项目(如 C++17/20、新版 Qt、现代 CMake 实践等),我们需要手动编译安装最新版本的 CMake。本文详细介绍如何在 Ubuntu 16.04 上从源码编译安装 CMake 3.25。
官方文档:https://cmake.org/documentation/
下载地址:https://cmake.org/download/
目标版本:CMake 3.25.x
一、为什么需要编译安装
1.1 Ubuntu 16.04 的 CMake 版本问题
# Ubuntu 16.04 官方源的 CMake 版本
$ apt-cache policy cmake
cmake:
已安装:3.5.1-1ubuntu3
候选版本:3.5.1-1ubuntu3
CMake 3.5 发布于 2016 年,缺少很多现代特性:
- 缺少 C++17/20 支持 - 无法正确检测新标准
- 缺少现代 CMake 实践 - 如 target_link_libraries 的改进
- 缺少新模块 - 如 FetchContent 的完整功能
- 缺少性能优化 - 新版本构建速度更快
- 安全更新 - 旧版本可能存在安全漏洞
1.2 为什么选择 3.25 版本
CMake 3.25 是一个稳定版本,提供了:
- 完整的 C++20 支持
- 改进的预设(Presets)功能
- 更好的 IDE 集成
- 性能优化和 bug 修复
- 广泛的第三方库兼容性
二、准备工作
2.1 系统要求
# 操作系统
Ubuntu 16.04 LTS (x86_64)
# 最低配置
- CPU: 双核
- 内存:2GB
- 磁盘空间:5GB 可用空间
# 推荐配置
- CPU: 四核或更多
- 内存:4GB 或更多
- 磁盘空间:10GB 可用空间
2.2 安装编译依赖
# 更新软件包列表
sudo apt-get update
# 安装基础编译工具
sudo apt-get install -y build-essential
# 安装 CMake 编译依赖
sudo apt-get install -y libssl-dev zlib1g-dev libbz2-dev liblzma-dev libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev libgdbm-dev libdb5.3-dev libexpat1-dev libcurl4-gnutls-dev libffi-dev libxml2-dev libxslt1-dev
# 安装可选依赖(用于 GUI 和额外功能)
sudo apt-get install -y qtbase5-dev qttools5-dev qttools5-dev-tools libqt5opengl5-dev libqt5webkit5-dev libglu1-mesa-dev freeglut3-dev mesa-common-dev
# 安装版本控制工具
sudo apt-get install -y git wget curl
# 清理不需要的包
sudo apt-get autoremove -y
sudo apt-get autoclean
2.3 创建安装目录
# 创建源码目录
sudo mkdir -p /opt/cmake-src
sudo chown $USER:$USER /opt/cmake-src
# 创建安装目录
sudo mkdir -p /opt/cmake-3.25
sudo chown $USER:$USER /opt/cmake-3.25
# 创建工作目录
mkdir -p ~/cmake-build
cd ~/cmake-build
三、下载 CMake 源码
3.1 从官方网站下载(推荐)
# 进入工作目录
cd ~/cmake-build
# 下载 CMake 3.25.3 源码(最新 3.25 版本)
wget https://cmake.org/files/v3.25/cmake-3.25.3.tar.gz
# 或者使用镜像源(国内用户)
# wget https://mirror.tuna.tsinghua.edu.cn/github-release/cmake/cmake-3.25.3.tar.gz
# 验证下载完整性(可选)
wget https://cmake.org/files/v3.25/cmake-3.25.3.tar.gz.sha256
sha256sum -c cmake-3.25.3.tar.gz.sha256
# 解压源码
tar -xzf cmake-3.25.3.tar.gz
cd cmake-3.25.3
3.2 从 Git 仓库克隆(可选)
# 克隆官方仓库
git clone https://gitlab.kitware.com/cmake/cmake.git
cd cmake
# 切换到 3.25.3 标签
git checkout v3.25.3
# 或者使用 GitHub 镜像
git clone https://github.com/Kitware/CMake.git
cd CMake
git checkout v3.25.3
四、编译安装
4.1 配置编译选项
# 创建构建目录
mkdir -p build
cd build
# 运行 bootstrap 脚本配置
../bootstrap --prefix=/opt/cmake-3.25 --parallel=$(nproc) --no-system-libs --no-system-curl --no-system-expat --no-system-zlib --no-system-bzip2 --no-system-libarchive --no-system-librhash --no-system-libuv
# 配置选项说明:
# --prefix 安装目录
# --parallel 并行编译,使用所有 CPU 核心
# --no-system-libs 使用源码自带的库,避免兼容性问题
# --enable-openssl 启用 OpenSSL 支持(用于 HTTPS)
# --qt-gui 编译 Qt 图形界面(cmake-gui)
4.2 开始编译
# 使用 make 编译(bootstrap 已生成 Makefile)
make -j$(nproc)
# 或者使用 ninja(如果安装了)
# cmake -G Ninja .. && ninja
# 编译时间参考:
# - 双核 CPU:约 15-20 分钟
# - 四核 CPU:约 8-12 分钟
# - 八核 CPU:约 5-8 分钟
4.3 安装
# 安装到指定目录
make install
# 验证安装
/opt/cmake-3.25/bin/cmake --version
# 预期输出:
# cmake version 3.25.3
#
# CMake suite maintained and supported by Kitware (kitware.com/cmake).
五、配置系统路径
5.1 方法一:更新 alternatives(推荐)
# 注册新版本的 cmake
sudo update-alternatives --install /usr/bin/cmake cmake /opt/cmake-3.25/bin/cmake 100
sudo update-alternatives --install /usr/bin/ctest ctest /opt/cmake-3.25/bin/ctest 100
sudo update-alternatives --install /usr/bin/cpack cpack /opt/cmake-3.25/bin/cpack 100
sudo update-alternatives --install /usr/bin/ccmake ccmake /opt/cmake-3.25/bin/ccmake 100
# 如果有 cmake-gui
sudo update-alternatives --install /usr/bin/cmake-gui cmake-gui /opt/cmake-3.25/bin/cmake-gui 100
# 设置默认版本
sudo update-alternatives --config cmake
# 验证
cmake --version
5.2 方法二:创建符号链接
# 备份旧版本(如果有)
sudo mv /usr/bin/cmake /usr/bin/cmake.old 2>/dev/null
sudo mv /usr/bin/ctest /usr/bin/ctest.old 2>/dev/null
sudo mv /usr/bin/cpack /usr/bin/cpack.old 2>/dev/null
sudo mv /usr/bin/ccmake /usr/bin/ccmake.old 2>/dev/null
# 创建符号链接
sudo ln -s /opt/cmake-3.25/bin/cmake /usr/bin/cmake
sudo ln -s /opt/cmake-3.25/bin/ctest /usr/bin/ctest
sudo ln -s /opt/cmake-3.25/bin/cpack /usr/bin/cpack
sudo ln -s /opt/cmake-3.25/bin/ccmake /usr/bin/ccmake
sudo ln -s /opt/cmake-3.25/bin/cmake-gui /usr/bin/cmake-gui 2>/dev/null
# 验证
cmake --version
5.3 方法三:修改 PATH 环境变量
# 编辑 ~/.bashrc 或 ~/.profile
echo 'export PATH=/opt/cmake-3.25/bin:$PATH' >> ~/.bashrc
# 使配置生效
source ~/.bashrc
# 验证
which cmake
cmake --version
5.4 配置 man 手册页
# 创建 man 目录链接
sudo mkdir -p /usr/local/share/man/man1
sudo ln -s /opt/cmake-3.25/man/man1/* /usr/local/share/man/man1/
# 更新 man 数据库
sudo mandb
# 查看帮助
man cmake
六、验证安装
6.1 版本检查
# 检查版本
cmake --version
# 检查所有组件
cmake --version && ctest --version && cpack --version
# 检查 GUI(如果安装了)
cmake-gui --version
6.2 功能测试
# 创建测试项目
mkdir -p ~/cmake-test
cd ~/cmake-test
# 创建 CMakeLists.txt
cat > CMakeLists.txt << 'EOF'
cmake_minimum_required(VERSION 3.25)
project(TestProject VERSION 1.0.0 LANGUAGES CXX)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 创建可执行文件
add_executable(hello main.cpp)
# 打印配置信息
message(STATUS "CMake version: ${CMAKE_VERSION}")
message(STATUS "C++ compiler: ${CMAKE_CXX_COMPILER}")
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
EOF
# 创建测试源码
cat > main.cpp << 'EOF'
#include
#include
int main() {
std::cout << "Hello from CMake!" << std::endl;
#ifdef __cpp_lib_ranges
std::cout << "C++20 ranges supported!" << std::endl;
#endif
return 0;
}
EOF
# 构建项目
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .
# 运行测试
./hello
6.3 检查支持的生成器
# 列出生成器
cmake --help
# 查看支持的生成器
cmake -G
# 常用生成器:
# - "Unix Makefiles" (默认)
# - "Ninja" (更快)
# - "Eclipse CDT4 Generator"
# - "CodeBlocks - Unix Makefiles"
七、使用 Ninja 加速构建(可选)
7.1 安装 Ninja
# 从源码编译 Ninja(推荐最新版本)
cd ~
git clone https://github.com/ninja-build/ninja.git
cd ninja
git checkout v1.11.1
# 编译
./configure.py --bootstrap
# 安装
sudo cp ninja /usr/local/bin/
sudo cp -r misc/ninja.vim /usr/share/vim/vim*/syntax/ 2>/dev/null
# 验证
ninja --version
7.2 使用 Ninja 构建项目
# 使用 Ninja 生成器
cmake -G Ninja -B build -S .
cmake --build build
# 或者
cd build
cmake -G Ninja ..
ninja
八、常见问题
8.1 编译错误:C++ 编译器太老
# Ubuntu 16.04 默认 GCC 版本可能太老
# 需要安装新版 GCC
# 添加 toolchain PPA
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
# 安装 GCC 9
sudo apt-get install -y gcc-9 g++-9
# 设置默认版本
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 90
# 验证
gcc --version
g++ --version
# 重新配置 CMake
cd ~/cmake-build/cmake-3.25.3/build
../bootstrap --prefix=/opt/cmake-3.25 --parallel=$(nproc)
make -j$(nproc)
sudo make install
8.2 链接错误:OpenSSL 版本不兼容
# Ubuntu 16.04 的 OpenSSL 版本较老
# 可以禁用 OpenSSL 或使用源码自带
# 重新配置,不使用系统 OpenSSL
cd ~/cmake-build/cmake-3.25.3/build
rm -rf *
../bootstrap --prefix=/opt/cmake-3.25 --parallel=$(nproc) --no-system-libs
make -j$(nproc)
sudo make install
8.3 内存不足导致编译失败
# 减少并行编译的任务数
cd ~/cmake-build/cmake-3.25.3/build
make -j2 # 只使用 2 个核心
# 或者增加 swap 空间
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 验证 swap
free -h
8.4 安装后 cmake 命令找不到
# 检查 PATH
echo $PATH
# 临时添加路径
export PATH=/opt/cmake-3.25/bin:$PATH
# 永久添加到 ~/.bashrc
echo 'export PATH=/opt/cmake-3.25/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 或者使用完整路径
/opt/cmake-3.25/bin/cmake --version
8.5 与旧版本冲突
# 检查是否有多个 cmake
which -a cmake
# 卸载旧版本(如果需要)
sudo apt-get remove --purge cmake
# 或者使用 update-alternatives 管理
sudo update-alternatives --config cmake
九、卸载方法
# 方法 1:删除安装目录
sudo rm -rf /opt/cmake-3.25
# 方法 2:移除符号链接
sudo rm /usr/bin/cmake
sudo rm /usr/bin/ctest
sudo rm /usr/bin/cpack
sudo rm /usr/bin/ccmake
sudo rm /usr/bin/cmake-gui
# 方法 3:移除 alternatives 配置
sudo update-alternatives --remove cmake /opt/cmake-3.25/bin/cmake
sudo update-alternatives --remove ctest /opt/cmake-3.25/bin/ctest
sudo update-alternatives --remove cpack /opt/cmake-3.25/bin/cpack
sudo update-alternatives --remove ccmake /opt/cmake-3.25/bin/ccmake
# 方法 4:清理 PATH
# 编辑 ~/.bashrc,删除相关行
sed -i '/cmake-3.25/d' ~/.bashrc
source ~/.bashrc
# 清理源码和构建目录
rm -rf ~/cmake-build
十、性能优化建议
10.1 使用 ccache 加速重复编译
# 安装 ccache
sudo apt-get install -y ccache
# 配置 ccache
export CC="/usr/lib/ccache/gcc"
export CXX="/usr/lib/ccache/g++"
# 添加到 ~/.bashrc
echo 'export CC="/usr/lib/ccache/gcc"' >> ~/.bashrc
echo 'export CXX="/usr/lib/ccache/g++"' >> ~/.bashrc
source ~/.bashrc
# 查看缓存状态
ccache -s
10.2 CMake 预设配置
# CMake 3.25 支持预设配置
# 创建 CMakePresets.json
cat > CMakePresets.json << 'EOF'
{
"version": 3,
"configurePresets": [
{
"name": "release",
"displayName": "Release",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/release",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_CXX_STANDARD": "20"
}
},
{
"name": "debug",
"displayName": "Debug",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_CXX_STANDARD": "20"
}
}
],
"buildPresets": [
{
"name": "release-build",
"configurePreset": "release"
},
{
"name": "debug-build",
"configurePreset": "debug"
}
]
}
EOF
# 使用预设
cmake --preset=release
cmake --build --preset=release-build
总结
通过本文,你应该已经成功在 Ubuntu 16.04 上编译安装了 CMake 3.25。主要步骤包括:
- 准备环境 - 安装编译依赖和工具链
- 下载源码 - 从官网或 Git 获取源码
- 配置编译 - 使用 bootstrap 配置选项
- 编译安装 - make 编译并安装到指定目录
- 配置路径 - 设置 alternatives 或 PATH
- 验证测试 - 确保安装成功
升级后的 CMake 3.25 将为你带来:
- ✅ 完整的 C++20 支持
- ✅ 更快的构建速度
- ✅ 更好的 IDE 集成
- ✅ 现代 CMake 实践支持
- ✅ 持续的安全更新
如果你在编译过程中遇到问题,可以查看 CMake 官方文档或社区论坛获取帮助。🚀
注:本文基于 Ubuntu 16.04 LTS 和 CMake 3.25.3 编写。如果你使用的是其他版本,步骤可能略有不同。建议在生产环境部署前先在测试环境验证。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。





