2、环境准备:安装CMake和CPack、验证安装、配置构建环境(Windows/Linux/macOS)、设置编译器

好,咱们正式开始动手。这一章说白了就是搭台子——把CMake和CPack装好,把编译器配通,确保后续所有打包操作能顺利跑起来。

我见过不少同学一上来就写CMakeLists.txt,结果编译都过不了,最后发现是环境没配好。嗯,咱们别走这个弯路。

2.1 安装CMake和CPack

CMake和CPack是绑在一起的。你装好CMake,CPack自然就有了。我个人的习惯是:永远装最新稳定版,别用系统自带的旧版本,坑太多。

Windows 安装

  1. 去 cmake.org/download 下载 cmake-xxx-windows-x86_64.msi
  2. 双击安装,记得勾选 "Add CMake to the system PATH for all users"
  3. 安装完成后,打开命令提示符验证:
cmake --version

如果显示版本号,说明装好了。我遇到过有人忘了勾PATH,结果命令行死活找不到cmake——别慌,手动加一下环境变量就行。

小技巧: Windows上我建议用 PowerShell 或 Git Bash,别用 cmd。编码问题少很多。

Linux 安装

Linux上最省事的方式是用包管理器。但要注意——apt或yum里的版本往往偏老。

# Ubuntu / Debian
sudo apt update
sudo apt install cmake

# CentOS / RHEL / Fedora
sudo yum install cmake
# 或者
sudo dnf install cmake

装完验证:

cmake --version

如果版本低于3.20,我建议你手动装。为什么?因为低版本的CPack对某些打包格式支持不好。我曾经被CMake 3.10坑过——打包出来的deb文件结构不对,排查了一下午。

手动安装方式:

wget https://github.com/Kitware/CMake/releases/download/v3.28.0/cmake-3.28.0-linux-x86_64.tar.gz
tar -xzf cmake-3.28.0-linux-x86_64.tar.gz
sudo mv cmake-3.28.0-linux-x86_64 /opt/cmake
sudo ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake

macOS 安装

macOS上我推荐用Homebrew,干净利落:

brew install cmake

验证:

cmake --version

如果你用MacPorts也行,但Homebrew的更新更及时。我个人两台Mac都用brew,没出过问题。

2.2 验证CPack是否可用

装好CMake后,CPack应该自动可用。验证一下:

cpack --version

如果显示版本号,说明CPack已经就绪。如果提示"command not found",那可能是PATH没配好。Windows上重新打开终端试试,Linux/macOS检查一下软链接。

核心要点: CMake和CPack的版本号应该一致。如果不一样,说明你的环境有问题。

2.3 配置构建环境

环境配置这块,说白了就是让CMake能找到你的编译器。不同平台差别挺大,我一个个说。

Windows:配置Visual Studio

Windows上我几乎只用Visual Studio。CMake会自动检测VS的安装路径,但有个前提——你得从开发者命令提示符或x64 Native Tools Command Prompt里运行cmake。

为什么?因为那些命令行窗口已经帮你设好了环境变量。你直接打开普通cmd,cmake可能找不到cl.exe。

配置示例:

# 在 "x64 Native Tools Command Prompt for VS 2022" 中执行
cmake -B build -G "Visual Studio 17 2022" -A x64

我个人习惯用Ninja,更快:

cmake -B build -G "Ninja" -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=cl
注意: 如果你装了多个VS版本,CMake默认选最新的。想指定版本,用 -T 参数,比如 -T v142 对应VS 2019的工具集。

Linux:配置GCC或Clang

Linux上CMake会自动找gcc/g++。你通常不需要额外配置。但如果你想用Clang:

cmake -B build -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++

我遇到过一种情况:系统里同时装了gcc-9和gcc-11,CMake默认用了gcc-9。想用新版怎么办?

cmake -B build -DCMAKE_C_COMPILER=gcc-11 -DCMAKE_CXX_COMPILER=g++-11

或者设置环境变量:

export CC=gcc-11
export CXX=g++-11
cmake -B build

macOS:配置Xcode或Clang

macOS上CMake默认用Clang(Xcode自带的)。你什么都不用配,直接跑cmake就行。

但如果你想用Xcode项目格式:

cmake -B build -G "Xcode"

我个人在macOS上开发时,喜欢用Ninja + Clang的组合,编译速度比Xcode快不少:

cmake -B build -G "Ninja"

2.4 验证编译器配置

环境配好了,咱们写个最简单的CMakeLists.txt验证一下:

# CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(HelloCPack LANGUAGES CXX)
add_executable(hello main.cpp)

再写个main.cpp:

#include <iostream>
int main() {
    std::cout << "Hello CPack!" << std::endl;
    return 0;
}

然后执行:

cmake -B build
cmake --build build
./build/hello   # Windows上是 build\Release\hello.exe

如果看到"Hello CPack!",说明你的环境全部就绪。如果报错,别急——八成是编译器没找到,或者CMake版本太低。

避坑指南: 我曾经在Windows上忘记装VS的C++工作负载,结果cmake报错说找不到编译器。去Visual Studio Installer里勾上"使用C++的桌面开发"就好了。

2.5 环境配置速查表

平台 推荐编译器 CMake生成器 注意事项
Windows MSVC (Visual Studio) Ninja 或 VS 必须从开发者命令提示符运行
Linux GCC 或 Clang Unix Makefiles 或 Ninja 注意gcc版本,建议≥9
macOS Apple Clang Ninja 或 Xcode 安装Xcode Command Line Tools

好了,环境准备就到这儿。下一章咱们开始写真正的CMakeLists.txt,把CPack集成进去。你想想看,如果连cmake --version都跑不通,后面打包再花哨也没用——所以这一步值得认真对待。