windows cmake 编译安装

老刘

Windows 下 CMake 编译安装全攻略:从小白到高手的完整指南

在 Windows 上使用 CMake 进行编译安装,是许多开发者、科研人员乃至有一定需求的电脑爱好者都会遇到的场景。无论是为了安装某个开源软件的最新版本,还是为了在特定环境下构建项目,掌握这项技能都很有必要。今天,我就以一个“老司机”的身份,带你彻底搞懂这个过程,无论你是刚入门的小白,还是有经验但总遇到坑的玩家,这篇文章都能给你清晰的指引。

一、 核心概念扫盲:CMake 到底是什么?

简单来说,CMake 不是一个编译器,而是一个“构建系统生成器”。你可以把它理解为一个高级的项目构建“指挥家”。

  • 你的源代码就像一堆乐谱。
  • 编译器(如 MSVC, MinGW, GCC) 就像是演奏家,负责把乐谱变成音乐(可执行文件)。
  • CMake 就是这个指挥家。它不直接演奏,而是读取你写的“总谱”(CMakeLists.txt 文件),然后根据你所在的平台(Windows, Linux, macOS)和选择的工具,生成一个适合该平台的“演奏指南”。在 Windows 上,这个“演奏指南”通常就是 Visual Studio 的 .sln 解决方案文件,或者 Ninja 的构建文件。

所以,“CMake 编译安装”的过程通常是三步

  1. 配置 (Configure):CMake 读取 CMakeLists.txt,检查你的系统环境,让你选择编译选项。
  2. 生成 (Generate):CMake 根据你的配置,生成对应构建系统(如 VS 工程)的文件。
  3. 构建 (Build):使用真正的编译器(如 Visual Studio 的 MSBuildninja)去编译源代码,生成最终的库文件或可执行程序,并进行安装。

二、 准备工作:安装必备工具

在开始任何编译之前,我们需要搭好舞台。以下是几个核心工具,请根据你的需求选择安装。

方案A:面向新手与通用开发(推荐)

windows cmake 编译安装

这套组合兼容性好,图形化界面操作直观。

  1. 安装 Visual Studio (2019/2022)

    • 作用:提供微软官方的 MSVC 编译器、C++ 开发库和构建工具。这是 Windows 上最主流的 C++ 开发环境。
    • 如何安装
      • 访问 Visual Studio 官网 下载 Community(社区免费版)。
      • 运行安装程序,在“工作负载”中务必勾选“使用 C++ 的桌面开发”
      • 在右侧的“安装详细信息”中,确保勾选了“Windows 10/11 SDK”和“用于 x86 和 x64 的 Visual C++ 工具”。
      • 点击安装,等待完成。
  2. 安装 CMake

    • 作用:核心工具,就是我们今天的主角。
    • 如何安装
      • 访问 CMake 官网下载页
      • 选择 Windows x64 Installer(如果你的系统是64位,现在基本都是)。
      • 运行安装程序,一路点击“Next”。非常重要的一步:在“Install Options”界面,务必勾选 Add CMake to the system PATH for all users(为所有用户添加到系统 PATH)。这能让你在命令行任意位置使用 cmake 命令。
      • 完成安装。
  3. 安装 Git (可选但强烈推荐)

    • 作用:方便地下载 GitHub 等平台上的开源项目源代码。
    • 官网下载安装即可,安装时同样注意将 Git Bash 添加到 PATH。

验证安装: 按下 Win + R,输入 cmd 打开命令提示符,分别输入以下命令,能显示版本号即表示安装成功。

cl      # 应显示 MSVC 编译器版本
cmake --version  # 应显示 CMake 版本
git --version    # 应显示 Git 版本(如果安装了)

方案B:面向偏好 MinGW/GCC 环境的用户

如果你需要编译一些来自 Linux 世界、更依赖 GCC 工具链的软件(如 FFmpeg),可以选择此方案。

  1. 安装 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(图形界面 - 新手友好)

  1. 打开 CMake GUI。在开始菜单搜索 CMake (cmake-gui) 并打开。
  2. 设置路径
    • Where is the source code: 浏览选择你的源代码目录,例如 D:\Projects\jq
    • Where to build the binaries: 浏览选择或新建一个构建目录,例如 D:\Projects\jq\build。这个 build 文件夹就是我们的“施工工地”。
  3. 点击 Configure(配置)
    • 会弹窗让你选择“生成器”。如果你安装了 Visual Studio,这里会出现类似 Visual Studio 17 2022 的选项,并让你选择平台(Win32/x64)。对于64位系统,选择 x64。如果使用 MinGW,则选择 MinGW Makefiles
    • 点击 Finish
  4. 查看并调整配置
    • 配置完成后,中间区域会列出所有可配置的选项(如 BUILD_SHARED_LIBS, CMAKE_INSTALL_PREFIX 等)。红色背景的行表示新出现或有变动的配置。
    • CMAKE_INSTALL_PREFIX 决定了软件安装到哪里,默认为 C:\Program Files\<ProjectName>。你可以把它改为一个你有写入权限的路径,例如 D:\Programs\jq,避免管理员权限问题。
  5. 再次点击 Configure,直到所有红色条目消失。
  6. 点击 Generate(生成)。成功后,日志会显示 Generating done。此时,在 D:\Projects\jq\build 目录下,已经生成了 Visual Studio 的 .sln 解决方案文件。
  7. 进行构建与安装
    • 你可以直接点击 Open Project 用 Visual Studio 打开项目进行编译。
    • 更推荐使用命令行(功能更全):
      1. 管理员身份打开“开始菜单 -> Visual Studio 2022 -> x64 Native Tools Command Prompt”(如果你选的是x64)。这确保环境变量已正确设置。
      2. 切换到构建目录:cd D:\Projects\jq\build
      3. 编译项目:cmake --build . --config Release--config Release 指定生成优化后的发布版本,比默认的 Debug 版本更小更快。
      4. 安装到指定目录:cmake --build . --config Release --target install。完成后,软件(jq.exe)和相关文件就会被复制到之前设置的 D:\Programs\jq 目录下。
      5. 为了方便使用,你可以将 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      # 安装

四、 常见问题与避坑指南

  1. 错误:`Could NOT find ** (missing: _LIBRARY *_INCLUDE_DIR)`

    • 分析:CMake 找不到项目依赖的某个库(如 OpenSSL, ZLIB)。
    • 解决
      • 优先方案:使用包管理器安装。在 MSYS2 中用 pacman,或者尝试 Windows 包管理器 vcpkgconan。安装后,CMake 通常能自动找到。
      • 手动指定:在 CMake GUI 中,手动指定 ***_ROOT***_INCLUDE_DIR***_LIBRARY 这些变量的路径。
      • 源码编译依赖:先把这个依赖库也用 CMake 编译安装一遍。
  2. 错误:`generator ** does not support toolset specification, but toolset was specified.`**

    • 分析:你使用的生成器(如 MinGW Makefiles)不支持指定的工具集。这常发生在混用 Visual Studio 生成器和 MSVC 编译器版本参数时。
    • 解决:对于 MinGW,直接使用 -G "MinGW Makefiles" 即可,不要加 -T-A 参数。
  3. 编译成功但运行时报“找不到 VCRUNTIME140.dll 或 MSVCP140.dll”

  4. 如何清理构建?

    • 最彻底的方法:直接删除整个 build 目录,然后从头 configure
    • 在构建目录下,可以使用 cmake --build . --target clean 清理编译产物。
  5. 加速编译

    • 使用 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 下的编译安装,你就打开了一扇通往广阔开源世界的大门。很多软件的最新特性、特定补丁都需要自己动手编译才能获得。希望这篇详尽的指南能成为你桌面上的实用手册,祝你编译顺利,一次成功!

文章版权声明:文章内容均来源于各大短视频平台搜集以及修改和删减新增,如有侵权或者违规,请联系站长进行删除,如需转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
验证码
评论列表 (暂无评论,10人围观)

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

目录[+]