Windows 下 CMake 编译安装全攻略:从小白到高手的完整指南
在 Windows 上使用 CMake 进行编译安装,是许多开发者、科研人员乃至有一定需求的电脑爱好者都会遇到的场景。无论是为了安装某个开源软件的最新版本,还是为了在特定环境下构建项目,掌握这项技能都很有必要。今天,我就以一个“老司机”的身份,带你彻底搞懂这个过程,无论你是刚入门的小白,还是有经验但总遇到坑的玩家,这篇文章都能给你清晰的指引。
一、 核心概念扫盲:CMake 到底是什么?
简单来说,CMake 不是一个编译器,而是一个“构建系统生成器”。你可以把它理解为一个高级的项目构建“指挥家”。
- 你的源代码就像一堆乐谱。
- 编译器(如 MSVC, MinGW, GCC) 就像是演奏家,负责把乐谱变成音乐(可执行文件)。
- CMake 就是这个指挥家。它不直接演奏,而是读取你写的“总谱”(CMakeLists.txt 文件),然后根据你所在的平台(Windows, Linux, macOS)和选择的工具,生成一个适合该平台的“演奏指南”。在 Windows 上,这个“演奏指南”通常就是 Visual Studio 的
.sln解决方案文件,或者 Ninja 的构建文件。
所以,“CMake 编译安装”的过程通常是三步:
- 配置 (Configure):CMake 读取
CMakeLists.txt,检查你的系统环境,让你选择编译选项。 - 生成 (Generate):CMake 根据你的配置,生成对应构建系统(如 VS 工程)的文件。
- 构建 (Build):使用真正的编译器(如 Visual Studio 的
MSBuild或ninja)去编译源代码,生成最终的库文件或可执行程序,并进行安装。
二、 准备工作:安装必备工具
在开始任何编译之前,我们需要搭好舞台。以下是几个核心工具,请根据你的需求选择安装。
方案A:面向新手与通用开发(推荐)

这套组合兼容性好,图形化界面操作直观。
-
安装 Visual Studio (2019/2022)
- 作用:提供微软官方的 MSVC 编译器、C++ 开发库和构建工具。这是 Windows 上最主流的 C++ 开发环境。
- 如何安装:
- 访问 Visual Studio 官网 下载 Community(社区免费版)。
- 运行安装程序,在“工作负载”中务必勾选“使用 C++ 的桌面开发”。
- 在右侧的“安装详细信息”中,确保勾选了“Windows 10/11 SDK”和“用于 x86 和 x64 的 Visual C++ 工具”。
- 点击安装,等待完成。
-
安装 CMake
- 作用:核心工具,就是我们今天的主角。
- 如何安装:
- 访问 CMake 官网下载页。
- 选择
Windows x64 Installer(如果你的系统是64位,现在基本都是)。 - 运行安装程序,一路点击“Next”。非常重要的一步:在“Install Options”界面,务必勾选
Add CMake to the system PATH for all users(为所有用户添加到系统 PATH)。这能让你在命令行任意位置使用cmake命令。 - 完成安装。
-
安装 Git (可选但强烈推荐)
- 作用:方便地下载 GitHub 等平台上的开源项目源代码。
- 官网下载安装即可,安装时同样注意将 Git Bash 添加到 PATH。
验证安装:
按下 Win + R,输入 cmd 打开命令提示符,分别输入以下命令,能显示版本号即表示安装成功。
cl # 应显示 MSVC 编译器版本
cmake --version # 应显示 CMake 版本
git --version # 应显示 Git 版本(如果安装了)
方案B:面向偏好 MinGW/GCC 环境的用户
如果你需要编译一些来自 Linux 世界、更依赖 GCC 工具链的软件(如 FFmpeg),可以选择此方案。
- 安装 MSYS2
- 这是一个在 Windows 上提供类 Linux 环境和 Pacman 包管理器的优秀工具。
- 从官网下载安装后,运行
MSYS2 MSYS(蓝色图标)。 - 在打开的终端中,更新系统:
pacman -Syu,关闭窗口,再重新打开。 - 安装 MinGW 工具链:
pacman -S --needed base-devel mingw-w64-x86_64-toolchain。 - 安装 CMake:
pacman -S mingw-w64-x86_64-cmake。 - 此后,编译软件时应在
MSYS2 MinGW 64-bit(绿色图标)终端中进行。
三、 实战演练:手把手编译安装一个经典项目
我们以编译一个简单的、跨平台的开源命令行 JSON 处理工具 jq 的 Windows 版为例。假设你已经通过 Git 克隆或下载了其源代码到 D:\Projects\jq。
通用最佳实践:永远不要在源代码目录内直接构建!采用“外部构建”(Out-of-Source Build),保持源码目录干净。
方法一:使用 CMake GUI(图形界面 - 新手友好)
- 打开 CMake GUI。在开始菜单搜索
CMake (cmake-gui)并打开。 - 设置路径:
Where is the source code:浏览选择你的源代码目录,例如D:\Projects\jq。Where to build the binaries:浏览选择或新建一个构建目录,例如D:\Projects\jq\build。这个build文件夹就是我们的“施工工地”。
- 点击
Configure(配置)。- 会弹窗让你选择“生成器”。如果你安装了 Visual Studio,这里会出现类似
Visual Studio 17 2022的选项,并让你选择平台(Win32/x64)。对于64位系统,选择x64。如果使用 MinGW,则选择MinGW Makefiles。 - 点击
Finish。
- 会弹窗让你选择“生成器”。如果你安装了 Visual Studio,这里会出现类似
- 查看并调整配置。
- 配置完成后,中间区域会列出所有可配置的选项(如
BUILD_SHARED_LIBS,CMAKE_INSTALL_PREFIX等)。红色背景的行表示新出现或有变动的配置。 CMAKE_INSTALL_PREFIX决定了软件安装到哪里,默认为C:\Program Files\<ProjectName>。你可以把它改为一个你有写入权限的路径,例如D:\Programs\jq,避免管理员权限问题。
- 配置完成后,中间区域会列出所有可配置的选项(如
- 再次点击
Configure,直到所有红色条目消失。 - 点击
Generate(生成)。成功后,日志会显示Generating done。此时,在D:\Projects\jq\build目录下,已经生成了 Visual Studio 的.sln解决方案文件。 - 进行构建与安装。
- 你可以直接点击
Open Project用 Visual Studio 打开项目进行编译。 - 更推荐使用命令行(功能更全):
- 以管理员身份打开“开始菜单 -> Visual Studio 2022 -> x64 Native Tools Command Prompt”(如果你选的是x64)。这确保环境变量已正确设置。
- 切换到构建目录:
cd D:\Projects\jq\build。 - 编译项目:
cmake --build . --config Release。--config Release指定生成优化后的发布版本,比默认的 Debug 版本更小更快。 - 安装到指定目录:
cmake --build . --config Release --target install。完成后,软件(jq.exe)和相关文件就会被复制到之前设置的D:\Programs\jq目录下。 - 为了方便使用,你可以将
D:\Programs\jq\bin添加到系统的PATH环境变量中。这样,在任意命令行窗口输入jq就可以直接运行了。
- 你可以直接点击
方法二:使用命令行(高效快捷 - 进阶选择)
对于熟练用户,命令行更高效。同样在“VS x64 本机工具命令提示符”中操作:
# 1. 进入源码目录,并创建并进入构建目录
cd D:\Projects\jq
mkdir build && cd build
# 2. 配置阶段:生成 Visual Studio 2022 的64位工程,并设置安装前缀
cmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX=D:\Programs\jq
# 3. 构建并安装
cmake --build . --config Release --target install
命令解释:
-G:指定生成器。-A:指定平台架构。-DCMAKE_INSTALL_PREFIX=...:设置安装路径。
对于 MinGW 用户(在 MSYS2 MinGW 64-bit 终端中):
cd /d/Projects/jq # MSYS2 中,D盘路径是 /d/
mkdir build && cd build
cmake .. -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=/d/Programs/jq
make -j4 # 使用4个线程并行编译,加快速度
make install # 安装
四、 常见问题与避坑指南
-
错误:`Could NOT find ** (missing: _LIBRARY *_INCLUDE_DIR)`
- 分析:CMake 找不到项目依赖的某个库(如 OpenSSL, ZLIB)。
- 解决:
- 优先方案:使用包管理器安装。在 MSYS2 中用
pacman,或者尝试 Windows 包管理器vcpkg或conan。安装后,CMake 通常能自动找到。 - 手动指定:在 CMake GUI 中,手动指定
***_ROOT、***_INCLUDE_DIR和***_LIBRARY这些变量的路径。 - 源码编译依赖:先把这个依赖库也用 CMake 编译安装一遍。
- 优先方案:使用包管理器安装。在 MSYS2 中用
-
错误:`generator ** does not support toolset specification, but toolset was specified.`**
- 分析:你使用的生成器(如
MinGW Makefiles)不支持指定的工具集。这常发生在混用 Visual Studio 生成器和 MSVC 编译器版本参数时。 - 解决:对于 MinGW,直接使用
-G "MinGW Makefiles"即可,不要加-T或-A参数。
- 分析:你使用的生成器(如
-
编译成功但运行时报“找不到 VCRUNTIME140.dll 或 MSVCP140.dll”
- 分析:程序依赖 Visual C++ 运行时库。
- 解决:从微软官网下载并安装最新的 Visual C++ Redistributable。
-
如何清理构建?
- 最彻底的方法:直接删除整个
build目录,然后从头configure。 - 在构建目录下,可以使用
cmake --build . --target clean清理编译产物。
- 最彻底的方法:直接删除整个
-
加速编译
- 使用
cmake --build . -j 8(如果生成器支持,如 Ninja)或make -j8(MinGW)来利用多核CPU并行编译。 - 使用更快的构建系统生成器,如
-G "Ninja",需要先安装 Ninja。
- 使用
五、 高阶技巧与优化
- 使用
vcpkg管理依赖:对于大型项目,手动管理依赖非常痛苦。微软的vcpkg是一个优秀的 C++ 库管理工具。安装后,在 CMake 配置时加上-DCMAKE_TOOLCHAIN_FILE=[vcpkg根目录]/scripts/buildsystems/vcpkg.cmake,它可以自动为你提供依赖库。 - 交叉编译:在 Windows 上编译 Linux 或 ARM 的程序。这需要配置特定的工具链文件 (
-DCMAKE_TOOLCHAIN_FILE=...)。 - CPack 打包:利用 CMake 的 CPack 模块,可以一键生成安装包(如 NSIS 安装程序、ZIP 压缩包),方便分发你编译好的软件。
掌握了 CMake 在 Windows 下的编译安装,你就打开了一扇通往广阔开源世界的大门。很多软件的最新特性、特定补丁都需要自己动手编译才能获得。希望这篇详尽的指南能成为你桌面上的实用手册,祝你编译顺利,一次成功!

还没有评论,来说两句吧...