第1章:环境搭建——Windows/Linux/macOS下安装CMake

说实话,我见过太多人卡在第一步了。

明明代码写得挺好,一编译就报错。最后发现——CMake版本不对,或者压根没装对。我自己刚入行那会儿也踩过这个坑,折腾了一下午才发现是环境变量没配好。所以这一章,咱们先把地基打牢。

1.1 为什么需要CMake?

先问个问题:你写了一个跨平台项目,想在Windows上跑,也在Linux上跑,还在macOS上跑。你打算怎么构建?

用Visual Studio的.sln?Linux上打不开。用Makefile?Windows上又得装MinGW。每个平台写一套构建脚本?那维护成本就上天了。

CMake就是来解决这个问题的。它不直接编译代码,而是生成对应平台的构建文件。说白了,它是一个「构建系统的生成器」。你写一份CMakeLists.txt,它就能给你变出.sln、Makefile、Xcode项目……

核心思想:Write once, build anywhere.

1.2 各平台安装方式

我个人习惯用包管理器来装,干净利落。当然,去官网下载安装包也行,看你自己。

Windows

Windows下有两种主流方式:

  • 官方安装包:cmake.org/download 下载 .msi 文件,双击安装。安装时记得勾选「Add CMake to system PATH」。
  • 通过Chocolatey:如果你装了Chocolatey,一行命令搞定:choco install cmake --installargs 'ADD_CMAKE_TO_PATH=User'

我曾经遇到过:装完CMake后,在命令行里敲 cmake --version 提示找不到命令。原因就是没勾选添加到PATH。解决办法:手动把 C:\Program Files\CMake\bin 加到系统环境变量里。

Linux

Linux下最简单,用包管理器:

  • Ubuntu/Debian:sudo apt install cmake
  • CentOS/RHEL:sudo yum install cmake
  • Fedora:sudo dnf install cmake

不过要注意,apt里的CMake版本可能比较老。如果你需要最新版,我建议去官网下载源码编译,或者用Kitware的官方APT仓库。

小技巧:apt list --upgradable 可以查看是否有新版本。我一般每季度检查一次,避免因为CMake版本太低导致新语法不支持。

macOS

macOS用户推荐用Homebrew:

  • brew install cmake

当然,你也可以下载 .dmg 安装包。但我个人觉得Homebrew更省心,升级也方便:brew upgrade cmake

1.3 验证安装

装完之后,别急着写代码。先验证一下:

cmake --version

你应该会看到类似这样的输出:

cmake version 3.28.1
CMake suite maintained and supported by Kitware (kitware.com/cmake).

如果看到版本号,恭喜你,环境搭好了。

嗯,这里要注意:不同版本的CMake支持的语法略有差异。比如3.10之前不支持 target_link_librariesPRIVATE 关键字。所以尽量用新版本,我建议至少3.16以上。

1.4 第一个Hello CMake项目

光说不练假把式。咱们来写一个真正的CMake项目。

项目结构

hello_cmake/
├── CMakeLists.txt
└── main.cpp

main.cpp

#include <iostream>

int main() {
    std::cout << "Hello, CMake!" << std::endl;
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(HelloCMake VERSION 1.0.0 LANGUAGES CXX)

add_executable(hello_cmake main.cpp)

解释一下这三行:

  • cmake_minimum_required:指定最低CMake版本。低于这个版本会报错。
  • project:定义项目名称、版本、语言。这里我们只用C++。
  • add_executable:告诉CMake,我们要生成一个可执行文件,源文件是main.cpp。

构建与运行

在项目根目录下执行:

mkdir build
cd build
cmake ..
cmake --build .

然后运行:

./hello_cmake   # Linux/macOS
hello_cmake.exe # Windows

你应该会看到:

Hello, CMake!

为什么先建build目录?这叫「外部构建」。所有生成的文件都放在build里,不会污染源码目录。我见过有人直接在源码目录里跑cmake,结果一堆临时文件混在一起,看着就头疼。

1.5 知识体系总览

下面这张图,帮你把本章的核心逻辑串起来:

CMake环境搭建知识体系 Windows Linux macOS MSI / Chocolatey apt / yum / dnf Homebrew / DMG 验证安装:cmake --version 第一个项目:Hello CMake CMakeLists.txt → cmake .. → cmake --build . → 运行

1.6 避坑指南

最后,分享几个我踩过的坑:

  • 路径中有中文或空格:CMake对中文路径支持不好。我建议项目目录全用英文,不要有空格。
  • 忘记建build目录:直接在源码目录里跑cmake,然后生成的文件和源码混在一起。别问我怎么知道的。
  • Windows下用MinGW:如果你用MinGW,记得指定生成器:cmake -G "MinGW Makefiles" ..。不然默认生成Visual Studio项目,MinGW编译不了。
  • 版本太老:有些老旧教程还在用CMake 2.x的语法。现在都3.x了,很多新特性用起来更爽。比如 target_include_directoriesinclude_directories 优雅得多。

我的建议:初学者先别急着搞复杂项目。把Hello CMake跑通,理解「外部构建」和「内部构建」的区别,后面学起来会顺畅很多。

好了,环境搭好了,第一个项目也跑起来了。接下来你就可以放心地往CMakeLists.txt里加更多内容了。记住,构建系统是工具,不是目的。别在工具上花太多时间,够用就行。


公众号:蓝海资料掘金营,微信deep3321