CMake Windows编译教程

风辰君_1039

风辰君_1039

2026-08-08

258人浏览

原创

c++oding="utf-8" ?>

cmake在windows上需匹配生成器与编译器:-g "visual studio 17 2022"要求vs2022及对应命令行环境,-g "mingw makefiles"需path含gcc/g++/make,-g "nmake makefiles"依赖vcvarsall.bat初始化;选错则报错,且不同config应分目录构建避免缓存污染。

cmake windows编译教程

cmake 在 Windows 上不是“装完就能用”的工具,它本身不编译代码,只生成构建文件。真正决定能否成功编译的,是你选的生成器(generator)是否匹配已安装的编译器,以及环境变量是否被正确加载。直接跑 cmake .. 十有八九报错,比如 Generator 'MinGW Makefiles' could not be found 或 Visual Studio 17 2022 was not found。

怎么选对 cmake -G 参数

Windows 下最常用的三类生成器对应三套工具链,不能混用:

  • -G "Visual Studio 17 2022" → 必须已安装 Visual Studio 2022(或 Build Tools),且要用 x64 Native Tools Command Prompt 启动终端,普通 cmd 或 PowerShell 不行
  • -G "MinGW Makefiles" → 要求系统 PATH 中能直接调用 gcc、g++、make;注意:不是所有 MinGW 发行版都自带 make,有些只带 mingw32-make.exe,得手动 alias 或改名
  • -G "NMake Makefiles" → 依赖 Visual Studio 的 nmake.exe,必须先运行 vcvarsall.bat(如 "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat")初始化环境

查可用生成器的最快方式:cmake -G(不加路径),输出列表里带 ✅ 的才是当前系统识别到的。

MinGW 编译失败常见原因

很多人卡在 make 报错,比如:

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • make: *** No targets specified and no makefile found → 没生成 Makefile,确认 cmake -G "MinGW Makefiles" .. 是否执行成功,且 CMakeLists.txt 里写了 add_executable 等命令
  • gcc: error: unrecognized command-line option '-municode' → CMakeLists.txt 里误加了 Windows GUI 特有 flag,MinGW 不支持;删掉 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -municode") 这类行
  • undefined reference to `__imp__... → 链接时缺库,常见于调用了 Windows API 但没加 -luser32 -lgdi32;MinGW 默认不链接这些,得在 target_link_libraries 显式写

Visual Studio 生成器下 Release/Debug 混淆问题

用 cmake -G "Visual Studio 17 2022" .. 生成后,cmake --build . --config Release 和 --config Debug 是两个完全隔离的构建树。但很多人会:

  • 先跑 cmake --build . --config Release,再跑 cmake --build . --config Debug,结果 Debug 版本仍用 Release 的头文件或库路径 —— 因为 CMakeCache.txt 没清,缓存了上次的 CMAKE_BUILD_TYPE
  • 在 VS IDE 里切换配置,但没点“重新生成”,导致旧 obj 文件残留,链接失败

稳妥做法:每个 config 单独建目录,比如 build-release/ 和 build-debug/,各自运行 cmake -S .. -B . -G "Visual Studio 17 2022" -A Win64,避免交叉污染。

CMakeLists.txt 里 target_compile_features 的坑

Windows 下用 MSVC 编译时,target_compile_features 容易触发奇怪错误,比如:

  • feature 'cxx_std_20' not known → 不是 CMake 版本低,而是 MSVC 2022 默认不启用 C++20,得加 set(CMAKE_CXX_STANDARD 20) 和 set(CMAKE_CXX_STANDARD_REQUIRED ON) 才生效
  • feature 'cxx_concepts' not known → MSVC 对 concepts 支持分阶段,2022 v17.5+ 才完整支持,旧版即使开了 /std:c++20 也会报这个错
  • MinGW-w64 用 GCC 13+ 时,cxx_constexpr 可能被识别为 cxx_constexpr_2017,写错名称就静默忽略

建议:不用 target_compile_features 做硬性检查,改用 if(MSVC) 或 if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") 分支控制编译选项更可靠。

真正的难点不在语法,而在每次换工具链都要重验一遍路径、环境变量、生成器兼容性——哪怕只是把 gcc 换成 clang-cl,cmake -G 参数和后续命令全得重来。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.26

3239

3

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.27

2798

6

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

2023.08.01

1488

3

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2559

5

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.08

3290

4

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

1617

3

windows boot manager
windows boot manager

windows boot manager无法开机的解决方法:1、系统文件损坏,使用Windows安装光盘或USB启动盘进入恢复环境,选择修复计算机,然后选择自动修复;2、引导顺序错误,进入恢复环境,选择命令提示符,输入命令"bootrec /fixboot"和"bootrec /fixmbr",然后重新启动计算机;3、硬件问题,使用硬盘检测工具进行扫描和修复;4、重装操作系统。本专题还提供其他解决

2023.08.28

2477

4

windows锁屏快捷键
windows锁屏快捷键

windows锁屏快捷键是Windows键+L、Ctrl+Alt+Del、Windows键+D、Windows键+P和Windows键+R。本专题为大家提供windows相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.30

4867

5

Window.setInterval()方法
Window.setInterval()方法

Window.setInterval() 方法的基本语法是“window.setInterval(function, delay)”,function是要重复执行的函数或代码块,delay是每次执行之间的时间间隔,以毫秒为单位。本专题为大家提供Window.setInterval()相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

715

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
LLVM CMake构建指南
LLVM CMake构建指南

共0课时 | 0人学习

LLVM入门手册
LLVM入门手册

共0课时 | 0人学习

CMake 与 Conan 集成实践
CMake 与 Conan 集成实践

共0课时 | 0人学习