从零到一键绿:Qt 5.14.2 + VS2019 开发环境搭建、Kit 套件配置与构建错误修复完全手册
一份随时可查阅的实战手册:从 VS2019 模块选择、Qt 5.14.2 安装位置、Kit 双家族(MinGW/MSVC)配置、CMake 生成器选型、到常见错误修复与一键重置,一次说清楚;同时内联两个可直接跑的 BAT 包装脚本与环境诊断脚本。
适用场景:Qt Creator 提示
No suitable kits found、Kit 列表出现红色 ⚠️/❌、MinGW 与 MSVC 混配报错、ABI 不刷新、编译器叹号无法消除、调试按钮灰色、CMakeno CXX compiler found等。
系列导航|Qt 5.14.2 + VS2019 实战三篇① 环境搭建与 Kit 修复 (本篇)
目录
- 一、先懂原理:编译套件是怎么一回事
- [二、VS2019 安装与模块选择](#二、VS2019 安装与模块选择)
- [三、Qt 5.14.2 安装与默认位置](#三、Qt 5.14.2 安装与默认位置)
- [四、CMake 配置、生成器与调试器(CDB)](#四、CMake 配置、生成器与调试器(CDB))
- 4.1 CMake 安装
- 4.2 CMake 与生成器(Generator)原理
- 4.3 主流 Generator 对比与选型
- 4.4 VS2019 + CMake 推荐组合与命令行验证
- 4.5 Qt Creator 里的 CMake 工具与构建步骤配置
- 4.6 Windows SDK 与调试器(CDB)
- [五、Qt Creator Kit 套件配置详解](#五、Qt Creator Kit 套件配置详解)
- 5.0 Kit 总览:MinGW 与 MSVC 两大编译器家族对比
- 5.1--5.4 MSVC 家族:克隆编译器(vcvars 包装 BAT)、cdb、qmake、Kit 组装
- 5.5 MinGW 家族:免装 VS 的完整 Kit 配置
- 5.6 MSVC 家族 Kit 绑定关系汇总
- 六、常见错误与修复速查表
- [七、Kit 配置彻底乱了:重置与清理](#七、Kit 配置彻底乱了:重置与清理)
- 八、一键诊断脚本
- 九、快速检查清单
- [十、Qt 5.14 vs 5.15 选型与差异](#十、Qt 5.14 vs 5.15 选型与差异)
一、先懂原理:编译套件是怎么一回事
1.1 三大角色:编译器 / Qt 预编译库 / 调试器
很多人配置失败的根源,是把这三个东西混为一谈。它们各司其职:
| 角色 | 是什么 | 从哪来 | 干什么用 |
|---|---|---|---|
| 编译器(cl.exe) | MSVC 工具链(v141 / v142) | VS Installer 的"生成工具"组件 | 把你的 C++ 代码编译成机器码 |
| Qt 库(.dll/.lib) | Qt 框架的预编译二进制 | Qt 在线安装器(选择 MSVC2017 64-bit 那个套件) | 提供 Qt 框架功能供你的代码调用 |
| 调试器(cdb.exe) | Windows 控制台调试器 | Windows SDK 的 Debugging Tools 组件 | 断点、单步、变量查看 |
核心铁律:Qt 库是用哪个编译器编的,你自己的代码就必须用同一个编译器编。
Qt 5.14.2 的
msvc2017_64套件是用 MSVC v141 编译的,它的.lib只兼容 v141/v142 产物;若 Kit 里绑了 MinGW 编译器,就会出现经典报错:
MinGW ... cannot produce code for ... MSVC2017 ...
1.2 Kit(构建套件)= 四件套的绑定关系
Qt Creator 中的 Kit 本身不做任何编译工作,它只是一个绑定容器:
Kit = Qt 版本(Qt 库路径) + 编译器(cl.exe + 初始化环境 BAT) + 调试器(cdb.exe) + CMake/qmake 工具
配置 Kit 的全部学问,就是让这四项互相兼容且真实存在。任何一项缺失或错配,Kit 上就会出现叹号。
1.3 编译器与工具集版本对照表(ABI 匹配)
这是决定 Kit 能否绿的最底层规则:
| Qt 套件(安装器里的名字) | 编译器 ABI | 需要的 MSVC 工具集 | 实际版本号文件夹 | 所属 VS |
|---|---|---|---|---|
| Qt 5.14.2 MSVC2017 32bit | win_msvc2017_x86 | v141 | VC\Tools\MSVC\14.16.xxxxx |
VS2017 或 VS2019(勾 v141) |
| Qt 5.14.2 MSVC2017 64bit | win_msvc2017_64 | v141 | VC\Tools\MSVC\14.16.xxxxx |
VS2019 勾选 v141 即可(推荐) |
| Qt 5.14.2 MSVC2019 64bit | win_msvc2019_64 | v142 | VC\Tools\MSVC\14.29.xxxxx |
VS2019 默认自带 |
| Qt 5.15.2 MSVC2019 64bit | win_msvc2019_64 | v142 | VC\Tools\MSVC\14.29.xxxxx |
VS2019 默认自带 |
| Qt 5.14.2 MinGW 64bit | win_mingw73_64 | MinGW 7.3.0 | Qt 安装器自带 | 无需 VS |
三个要点:
- v141/v142 是工具集(cl.exe 每版本一套),互相独立 ;VS2019 默认只装 v142,想用 msvc2017 套件必须在安装时手动勾选 v141 生成工具。
- msvc2017 的 Qt 库,v141 和 v142 编译器都能链接(二进制兼容),但反过来 MinGW 谁都不行。
- 调试器 cdb.exe 与编译器版本完全解耦------它只跟 Windows SDK 版本走(每个 SDK 各带一份 cdb),跟你是 v141 还是 v142 编译的没有任何关系。
1.4 为什么 Kit 需要"初始化环境 BAT"(vcvars64.bat 的原理)
cl.exe 不能裸跑。它依赖一组环境变量(INCLUDE 头文件路径、LIB 库路径、PATH 工具路径),这些变量由 Windows SDK 和工具集目录计算而来。
vcvars64.bat(或 vcvarsall.bat x64)的作用就是在子 shell 里搭好这套编译环境。Qt Creator 每次调用 cl.exe 前,会先执行 Kit 里配置的 Initialization BAT:
- Initialization 留空或路径错 → cl.exe 找不到头文件/运行失败 → 编译器叹号
- cl.exe 路径指向 2019 工具集,但 BAT 指向 2017 工具集 → 环境变量与编译器混搭 → 链接失败 → 叹号
关键规则:编译器路径(cl.exe)和初始化脚本必须属于同一个工具集。
实践中最稳的做法是自写一个包装 BAT,用
vcvarsall.bat amd64 -vcvars_ver=14.16锁死工具集版本(见 5.1.1,可直接复制源码)。
amd64 与 amd64_x86 的区别(配置 CDB/编译器时常见):
| 环境脚本 | 宿主工具 | 目标产物 | 对应套件 |
|---|---|---|---|
vcvars64.bat(amd64) |
64 位 | 64 位程序 | msvc2017_64 / msvc2019_64 |
vcvarsall.bat amd64_x86 |
64 位 | 32 位程序 | msvc2017_32bit |
二、VS2019 安装与模块选择
2.1 获取安装器
- 下载 Visual Studio Community 2019(免费版即可)或 VS Installer:https://visualstudio.microsoft.com/zh-hans/downloads/
- 如果已装过 VS2019,直接打开 Visual Studio Installer → 修改 补组件即可,不必重装。
2.2 工作负载(模块)选择
安装向导第二页"工作负载",选择:
| 工作负载 | 是否勾选 | 说明 |
|---|---|---|
| ✅ 使用 C++ 的桌面开发 | 必选 | Qt MSVC 编译的最小依赖,包含 MSVC v142、Windows 10 SDK、Atl/Mfc 可选组件 |
| ❌ Unity / Python / .NET Web / UWP 等 | 不选 | 与 Qt 开发无关,白白占几十 GB |
"使用 C++ 的桌面开发"右侧的"安装详细信息"面板里,确认勾选 MSVC v141 和/或 v142(见下节)。
2.3 单个组件(针对 Qt 套件的精确勾选)
切到"单个组件"选项卡,搜索并勾选:
必须勾选(编译 Qt 程序的最小集)
| 组件 | 用途 | 对应 Qt 套件 |
|---|---|---|
| MSVC v142 - VS 2019 C++ x64/x86 生成工具 (v16.11) | v142 编译器(cl.exe) | Qt msvc2019_64 |
| MSVC v141 - VS 2017 C++ x64/x86 生成工具 (v16.11) | v141 编译器(cl.exe) | Qt msvc2017_64(Qt 5.14.2 主流套件) |
| Windows 10 SDK (10.0.19041.0) | 系统头文件 + CDB 调试器 | 所有 MSVC 套件 |
- v141 和 v142 按需二选一;只打算用 Qt 5.14.2 msvc2017_64 → 勾 v141;两个套件都要用 → 都勾。
- VS2019 可选的 Windows 10 SDK 有多个版本,注意:部分版本不带调试工具(详见第四章),推荐 19041 或单独装 SDK。
建议勾选(提升兼容性)
| 组件 | 用途 |
|---|---|
| C++ ATL for v141 / v142 | 部分第三方库依赖(如 protobuf) |
| C++ MFC for v141 / v142 | 如需 MFC 互操作 |
| Windows 10 SDK (10.0.22621.0) | 更新版本 SDK(可选,与 19041 共存) |
Windows 10/11 SDK 版本选择参考
| 版本 | Win10 对应版本 | 推荐度 | 备注 |
|---|---|---|---|
| 10.0.17134.0 | 1803 | ⭐⭐⭐ | Qt 5.14.2 时代最匹配,最稳 |
| 10.0.19041.0 | 2004 | ⭐⭐⭐ | Win10 最后一个长期维护 SDK,自带 CDB |
| 10.0.22621.0 | --- | ⭐⭐ | 较新,兼容性更好(可选) |
| 10.0.17763.0 | 1809 | ⭐⭐ | 可用 |
| 10.0.16299.0 | 1709 | ⭐ | 太旧,可能缺 Qt 需要的头文件 |
不确定就全选,占空间不大,Qt Creator 会自动挑最合适的。
2.4 安装位置与"默认安装位置"说明
安装向导第三页"安装位置",VS2019 的默认路径如下(不改动即按此安装):
| 内容 | 默认位置 |
|---|---|
| Visual Studio IDE 本体 | D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\(C 盘则为 C:\Program Files (x86)\...) |
| MSVC 工具集(cl.exe / vcvars) | ...\2019\Community\VC\Tools\MSVC\14.16.29515\(v141) ...\2019\Community\VC\Tools\MSVC\14.29.30133\(v142) |
| C++ 源码根目录 | ...\2019\Community\VC\ |
| Windows SDK 头文件/库 | C:\Program Files (x86)\Windows Kits\10\Include\<版本>\ C:\Program Files (x86)\Windows Kits\10\Lib\<版本>\ |
| CDB 调试器 | C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe(64 位) C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe(32 位) |
⚠️ 三个配置时要用的具体路径:
- v141 的 cl.exe:
...\VC\Tools\MSVC\14.16.29515\bin\Hostx64\x64\cl.exe- v141 的环境脚本:
...\VC\Tools\MSVC\14.16.29515\bin\Hostx64\x64\vcvars64.bat- v142 同理换成
14.29.30133文件夹。Windows SDK 无论哪个工具集,共用Windows Kits\10。
注意:末位数字(29515/30133)随 VS 小版本更新会变化,以本机实际目录为准。
2.5 验证安装
安装完成后重启电脑 ,打开 VS 2019 x64 Native Tools Command Prompt(开始菜单搜索 Developer Command Prompt),运行:
cl
第一行输出:
Microsoft (C) Optimizing Compiler Version 14.16.27023 → v141 ✓
Microsoft (C) Optimizing Compiler Version 14.29.29333 → v142 ✓
三、Qt 5.14.2 安装与默认位置
3.1 安装 Qt 5.14.2
- 打开 Qt Maintenance Tool(或从 Qt 官网下载离线/在线安装器;5.14.2 需用较老版本的在线安装器或开源历史版本包)
- 登录 Qt 账号 → 选择"添加组件"
- 展开 Qt → 勾选 Qt 5.14.2,其下子项按需勾选:
| 组件 | 是否勾选 | 说明 |
|---|---|---|
| ✅ MSVC 2017 64-bit | 必选(配合 VS2019 v141) | 这就是"Qt 预编译库",不是编译器! |
| ✅ MinGW 7.3.0 64-bit | 建议选 | 免装 VS 的备选/快速上手套件 |
| ✅ Sources | 建议选 | 查看/调试 Qt 源码用 |
| ✅ Qt 5.14.2 Additional Libraries | 按需 | 图表、多媒体等扩展模块 |
| ✅ Tools → Qt Creator | 必选(若未单独装) | IDE 本体 |
| ✅ Tools → MinGW 7.3.0 64-bit | 勾了 MinGW 套件就选 | MinGW 编译器工具链 |
易混点提醒 :Qt 安装器里的"MSVC 2017 64-bit"是用 MSVC2017 编译好的 Qt 库 ;
VS Installer 里的"MSVC v141 生成工具"才是编译器。二者缺一不可,且来源不同。
3.2 Qt 默认安装位置
Qt 默认安装在 C 盘根目录(安装器第一页可改,建议保持短路径):
| 内容 | 默认位置 |
|---|---|
| Qt 5.14.2 套件根 | C:\Qt\5.14.2\ |
| MSVC2017 64 位套件 | C:\Qt\5.14.2\msvc2017_64\(内含 bin\qmake.exe、bin\Qt5Core.dll) |
| MinGW 64 位套件 | C:\Qt\5.14.2\mingw73_64\ |
| Qt Creator | C:\Qt\Tools\QtCreator\bin\qtcreator.exe |
| MinGW 编译器 | C:\Qt\Tools\mingw730_64\ |
| 组件(Additional Libraries 等) | C:\Qt\Components\ |
判定一个 Qt 套件是否可用于 Kit:目录下存在
bin\qmake.exe。Qt Creator 的"Qt 版本"页就是靠 qmake 识别套件的。
四、CMake 配置、生成器与调试器(CDB)
4.1 CMake 安装
- 下载:https://cmake.org/download/(Windows x64 Installer,选 3.27.x 稳定版 ,不要用
-rc候选版) - 安装时务必勾选 :
Add CMake to system PATH for all users - 验证:新打开 CMD 输入
cmake --version,出现版本号即成功
也可不装外部 CMake,使用 Qt 安装器自带的 CMake(Tools 里勾选),但独立安装便于命令行复用。
4.2 CMake 与生成器(Generator)原理
一句话:CMake 自己不编译代码,它是"构建系统的构建系统" 。CMake 读取 CMakeLists.txt,按你选的 Generator 输出不同形态的"中间构建文件",再喊真正的编译器(cl.exe / g++)去干重活。
CMake 的两级流程:
CMakeLists.txt
│ (1) Configure 阶段 → cmake -S . -B build -G "..."
▼
中间产物(由 Generator 决定形态)
├─ Makefile ← NMake / MinGW Makefiles
├─ build.ninja ← Ninja
├─ *.vcxproj/*.sln ← Visual Studio NN
└─ *.ninja ← Ninja Multi-Config
│ (2) Build 阶段 → cmake --build build [--config Release]
▼
实际编译器工作: cl.exe 或 g++ → 产出 .obj → link → .exe
要点拆解:
- Generator 决定中间产物长什么样。不同 Generator 对"多配置、并行、增量"能力完全不同,这就是选型的本质。
- 单配置 vs 多配置 :
- 单配置(Ninja / Makefiles):一个 build 目录只对应一种配置(Debug 或 Release),需
CMAKE_BUILD_TYPE指定;切配置要重新新建 build 目录。 - 多配置(Visual Studio / Ninja Multi-Config):一个 build 目录同时包含 Debug/Release/RelWithDebInfo;build 时用
--config Release选。
- 单配置(Ninja / Makefiles):一个 build 目录只对应一种配置(Debug 或 Release),需
- CMake Cache(CMakeCache.txt) :Configure 阶段写定参数到 build 目录里,后续默认复用。修改 -D 参数后必须重新跑 Configure,或直接删 build 目录,否则新参数不生效。
- 编译器发现机制 :CMake 在 Configure 时实际去跑一次 cl.exe/g++,因此必须在它能"看见"编译器的环境下执行------MSVC 系就是先
call vcvars...bat拉好 INCLUDE/LIB,再跑 cmake。
4.3 主流 Generator 对比与选型
| Generator 名 | 后端编译器 | 中间产物 | 多配置 | 并行 | 需 vcvars 环境 | 典型适用 |
|---|---|---|---|---|---|---|
| Ninja | MSVC 或 MinGW | build.ninja |
❌ | ✅✅ 默认开 | ✅ MSVC 需要 | Qt Creator 首选,速度最快 |
| Ninja Multi-Config | MSVC | *.ninja |
✅ | ✅✅ | ✅ MSVC 需要 | 单目录多配置,兼顾 VS与 Ninja |
| Visual Studio 16 2019 | MSVC(-T v141/v142 选工具集) |
.sln/.vcxproj |
✅ | ✅ MSBuild | ❌ 自动定位 VS | 需要 VS IDE 打开调试、交付 |
| NMake Makefiles JOM | MSVC | Makefile | ❌ | ✅ JOM 多线程 | ✅ | Ninja 不可用时的稳妥备选 |
| NMake Makefiles | MSVC | Makefile | ❌ | ❌ 串行 | ✅ | 传统脚本兼容,不推荐 |
| MinGW Makefiles | MinGW g++ | Makefile | ❌ | ✅ -j |
❌ | MinGW 家族默认选择 |
| MSYS Makefiles | MSYS 下的 gcc | Makefile | ❌ | ✅ | ❌ | 仅 MSYS2 发行版环境使用 |
一句话选型:开发阶段追求速度 → Ninja;需要开 VS IDE 断点 → Visual Studio 16 2019;MinGW 家族 → MinGW Makefiles(或直接回 qmake,不碰 CMake)。Qt 5.14 本身 qmake 仍是一等公民,小项目不一定要上 CMake。
构建目标(target)名必须与 Generator 匹配------这是 VS 生成器最容易踩的一脚:
| Generator 类型 | 聚合目标 | Clean 目标 | 需要 --config |
|---|---|---|---|
| Ninja / NMake / MinGW Makefiles(单配置) | all |
clean |
❌ 由 CMAKE_BUILD_TYPE 决定 |
| Visual Studio 16 2019 / Ninja Multi-Config(多配置) | ALL_BUILD |
clean |
✅ 必须显式给 |
cmake --build . --target all在 VS 生成器下会把all原样转给 MSBuild,MSBuild 去找all.vcxproj→ 报MSB 1009(项目文件不存在)。- 一句话记:单配置用
all,VS 多配置用ALL_BUILD;clean两边同名。 - Qt Creator 里对应 Build Steps → CMake Build → Targets 这一栏;完整复现过程与配图见《Qt 构建排错实录 §1》。
4.4 VS2019 + CMake 推荐组合与命令行验证
针对本文主线(Qt 5.14.2 + VS2019)的推荐基线:
| Kit 家族 | 推荐 Generator | 需要的工具 | 备注 |
|---|---|---|---|
| MSVC v141 + Qt 5.14.2 msvc2017_64 | Ninja | CMake 3.27 + ninja.exe | 配合 C:\Qt\Config\vcvars_v141_amd64.bat(见 5.1.1),速度与可控性最佳 |
| MSVC v141 | NMake Makefiles JOM | CMake + jom.exe | Ninja 不可用时的备选 |
| MSVC v141(要开 VS IDE) | Visual Studio 16 2019 + -A x64 -T v141 |
仅 CMake | 自动定位 VS,不需 vcvars |
| MinGW 7.3.0 + Qt 5.14.2 mingw73_64 | MinGW Makefiles | CMake + mingw32-make.exe | 把 C:\Qt\Tools\mingw730_64\bin 加 PATH 即可 |
推荐工具基线 :VS2019 (v141) + CMake 3.27.x + Ninja,jom 作为兵备。
辅助工具安装位置:
- ninja.exe 下载:https://github.com/ninja-build/ninja/releases,解压放到
C:\Qt\Tools\Ninja\ninja.exe,该目录加入 PATH - jom 下载:Qt 官方 mirror https://download.qt.io/development_releases/jom/jom_1_1_3.zip,解压到
C:\Qt\Tools\jom_1_1_3\(或在 Qt 安装器 Tools 里直接勾选) - CMake 安装位置(默认):
C:\Program Files\CMake\bin\cmake.exe
命令行验证(Ninja + v141 环境,主流推荐):
bat
:: 1. 先加载 v141 x64 环境(同 5.1.1 那个包装 BAT)
call C:\Qt\Config\vcvars_v141_amd64.bat
:: 2. Configure(单配置 Ninja,一次性指定 build type 和 Qt 位置)
cmake -S . -B build_v141_ninja ^
-G "Ninja" ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_PREFIX_PATH=C:/Qt/5.14.2/msvc2017_64
:: 3. Build
cmake --build build_v141_ninja
预期输出:-- The CXX compiler identification is MSVC 19.16.xxxxx(这个 19.16 就是 v141)。
命令行验证(Visual Studio generator,不依赖 vcvars):
bat
cmake -S . -B build_vs16 ^
-G "Visual Studio 16 2019" -A x64 -T v141 ^
-DCMAKE_PREFIX_PATH=C:/Qt/5.14.2/msvc2017_64
cmake --build build_vs16 --config Release
-T v141就是选择工具集。与 5.1.1 包装 BAT 里-vcvars_ver=14.16作用完全一致:强制锁定工具集,不让 VS2019 默认选 v142。
常见坑:
- Ninja 直接报
no CXX compiler found→ 没先call vcvars_v141_amd64.bat就跑了 cmake;先加载环境再跑 - 改了
-D参数但行为不变 → CMakeCache 缓存了旧值,删 build 目录重跑 -A x64与-T v141拼写错(大写不对)→ VS generator 不识别,会默默退回默认 v142- Qt5_DIR 指到了
msvc2019_64链接失败 → 确认CMAKE_PREFIX_PATH与 Kit 里编译器 ABI 同家族同位数
4.5 Qt Creator 里的 CMake 工具与构建步骤配置
Qt Creator 不直接暴露 Generator 下拉------它是靠"构建步骤"里传的命令行推断。配置入口三处:
① Tools → Options → Build & Run → CMake 页签
- 自动检测不到就点 Add ,填
C:\Program Files\CMake\bin\cmake.exe - 勾上"默认"(如果同时登记了多个 CMake,选主力的那个)
② Tools → Options → Build & Run → Kits 页
- 每个 Kit 的 CMake tool 字段选① 里登记的 cmake
- CMake configuration 文本框可以预置默认参数(一般留空,靠项目 CMakeLists 自己处理)
③ 项目模式 → Build & Run → 对应 Kit 的 Build Settings(真正的 Generator 选择位置)
| 字段 | 选什么 | 实际含义 |
|---|---|---|
| Generator | Ninja / NMake Makefiles JOM / MinGW Makefiles / MSys Makefiles |
不同项对应向 cmake 传入不同的 -G "..." |
| Build directory | 默认 build-<Kit>-Debug |
单配置 Generator 时,切 Release 建议新建一个 build 目录 |
| Configure arguments | -DCMAKE_PREFIX_PATH=C:/Qt/5.14.2/msvc2017_64 -DCMAKE_BUILD_TYPE=Release 等 |
追加 -D 参数,改动后必须 Run CMake 重跑 Configure |
| Initial CMake step | 默认 cmake configure |
实际执行 cmake -S . -B <build dir> -G <上面选的> <参数> |
| Make program | Ninja 时留空(内置);JOM 时指向 jom.exe;MinGW 时指向 mingw32-make.exe |
对应 "Build" 步骤里实际呼入的后端工具 |
关键提示:MSVC 系 Kit 搭配 Ninja 时 ,Qt Creator 会调用 Kit 里编译器登记的 Initialization BAT(即
vcvars_v141_amd64.bat)拉起环境后再执行 cmake,因此不需要手工处理 vcvars;这就是为什么 5.1.1 的包装 BAT 既是编译器初始化入口,也是 CMake Ninja 能跑起来的前提。
切 Generator 的正确姿势 :Build Settings 里改完 Generator 后,先 Details → Wipe Stash或直接删除 build 目录(避免 CMakeCache.txt 新旧冲突),再 Run CMake。
4.6 Windows SDK 与调试器(CDB)
- CDB = Console Debugger,微软的命令行调试器,无图形界面,但支持断点、单步、变量查看等完整调试功能。Qt Creator 的 Debug 模式对 MSVC 项目就是通过 CDB 实现的。
- CDB 不在 Qt 里,也不在 MSVC 工具集里 ,它来自 Windows SDK 的 "Debugging Tools for Windows" 组件------这是
cdb.exe、windbg.exe的唯一来源。
为什么会出现"有编译器、没调试器"(Kit 叹号、Debug 按钮灰色):
- VS Installer"单个组件"里只勾了 MSVC 生成工具(只有 cl.exe),没勾 Windows SDK;
- 或勾了 SDK 但**没勾"安装调试工具"**子选项(VS Installer 内某些 SDK 版本默认不装调试工具);
- 或 VS2019 下拉里选的 Windows 10 SDK 版本本身不带调试器 → Qt Creator 无法自动检测到 cdb。
两种正确安装方式:
方式一:VS Installer 中勾选带调试工具的 Windows 10 SDK(如 10.0.19041.0),安装时如有"是否包含调试工具"选项,保持勾选。
方式二(推荐,最可控):单独下载安装 Windows SDK:
- 官方下载地址:https://learn.microsoft.com/zh-cn/windows/apps/windows-sdk/downloads
- 运行
winsdksetup.exe,组件列表里必须勾选 :- ✅ Debugging Tools for Windows(cdb.exe 的唯一来源)
- ✅ Windows SDK for Desktop C++ amd64 Apps (64 位桌面头文件/库,勾了会自动连带选择所需项;如需 32 位支持,另勾
x86 Apps)
- 安装完成后 cdb.exe 位于:
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe(64 位)C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe(32 位)
调试器与 MSVC 版本解耦:它的版本只跟 Windows SDK 版本走(10.0.19041 / 10.0.26100 各带一份 cdb),与你用 v141 还是 v142 编译无关。全机器共用一份即可。
五、Qt Creator Kit 套件配置详解
配置入口:Tools(工具) → Options(选项) → Build & Run(构建和运行),共四个相关页签:Compilers(编译器) / Debuggers(调试器) / Qt Versions(Qt 版本) / Kits(构建套件)。
配置顺序遵循依赖关系:先编译器 → 再调试器 → 再 Qt 版本 → 最后组装 Kit。
5.0 Kit 总览:Windows 下的两大编译器家族
Qt 5.14.2 在 Windows 上能用的 Kit 只有两个家族:MinGW 家族 和 MSVC 家族。选家族就是在选三条路:装不装 VS、发布兼容性、能不能用某些第三方库。
| 对比项 | MinGW 家族(GCC for Windows) | MSVC 家族(微软编译器) |
|---|---|---|
| 编译器可执行文件 | g++.exe / gcc.exe |
cl.exe |
| 调试器 | gdb.exe(GNU gdb) |
cdb.exe(Windows SDK) |
| 需要额外安装 | 不需要,Qt 安装器自带工具链 | 需要 VS Installer 装 v141/v142 生成工具 + SDK |
| Qt 套件目录名 | mingw73_64 / mingw73_32 |
msvc2017_64 / msvc2017_32bit / msvc2019_64 |
| ABI 标识 | win_mingw73_64 / win_mingw73_32 |
win_msvc2017_64 / win_msvc2019_64 ... |
| 初始化环境 | 无需 Initialization BAT(自包含) | 必须配置 vcvars 环境 BAT(见 5.1) |
| 与系统/其他库兼容 | 需附带 libgcc/libstdc++ 等运行时 | 与 Windows 原生生态、MFC/DirectX、商业库兼容性最好 |
| 典型适用场景 | 快速上手、不碰 VS 的学习/小工具 | 团队协作、商用发布、需与 VS 工程混编 |
铁律(两个家族共通):Qt 套件、编译器、调试器三者必须同家族、同位数:
mingw73_64 套件 → MinGW 7.3.0 x64 (g++) → gdb.exe (x64) ✔ 成套
msvc2017_64 套件 → MSVC v141 x64 (cl.exe) → cdb.exe (x64) ✔ 成套
mingw73_64 套件 → MSVC cl.exe / cdb.exe ✘ 跨家族 → 叹号
msvc2017_64 套件 → MinGW g++ / gdb.exe ✘ 就是经典报错
`MinGW ... cannot produce code for ... MSVC2017 ...`
Qt 安装器里两个家族的套件可以都勾(互不冲突),建两个 Kit 并存,项目右键随时切换。下面分别给出两套的完整配置。
5.1 Compilers 页:克隆配置出 MSVC 2017 x64 编译器(重点)
Qt Creator 自动检测经常把 v141/v142 混成一团、或 ABI 识别错误。**最稳的做法是:自己写一个初始化 BAT 锁定工具集版本,然后克隆一份编译器配置改成 MSVC 2017。**这是本节的核心。
5.1.1 关键机制:用 -vcvars_ver 锁定工具集版本的包装 BAT
VS2019 装了 v141 生成工具后,目录里并没有 vcvars64.bat(它在 VC\Auxiliary\Build\ 下只有 vcvarsall.bat);直接指给 Qt Creator 容易版本错乱。解法是建一个只有三行的包装 BAT ,放在 C:\Qt\Config\ 下:
vcvars_v141_amd64.bat(64 位环境,对应 msvc2017_64 套件):
bat
@echo off
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" amd64 -vcvars_ver=14.16
vcvars_v141_x86.bat(32 位环境,对应 msvc2017_32bit 套件):
bat
@echo off
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x86 -vcvars_ver=14.16
原理拆解:
vcvarsall.bat是 VS 官方环境入口(注意:它在VC\Auxiliary\Build\下,不在VC\Tools\MSVC\xxx\bin下);- 第一个参数是环境类型:
amd64= 64 位编译环境,x86= 32 位编译环境;-vcvars_ver=14.16是关键:强制选择 v141 工具集(14.16.x),而不是 VS2019 默认的 v142(14.29.x),彻底消除"环境变量与编译器版本混搭"的叹号;- VS 路径按实际版本改:
Enterprise/Community/Professional;用 v142 配 msvc2019 套件时把参数换成-vcvars_ver=14.29即可。
验证 BAT 是否生效:新建 CMD 窗口执行
call C:\Qt\Config\vcvars_v141_amd64.bat && cl
输出 ... Version 14.16.xxxxx 即 v141 环境就绪。
5.1.2 克隆编译器配置(Add / Clone 均可)
入口:Tools → Options → Build & Run → Compilers。自动检测项不可删,但可以在其基础上得到一份干净的手动配置:
- 选中一个已有的
Microsoft Visual C++ Compiler 19.x(或点 Add → Microsoft Visual C++ Compiler); - 点 Clone(克隆),生成一份可自由修改的副本(或者直接 Add Manually 从零填);
- 按下表把副本改成 MSVC 2017 x64:
| 字段 | 改成什么 | 填写要点 |
|---|---|---|
| Name | MSVC 2017 x64 (v141) |
自己起,一眼能识别 |
| Platform | Windows Microsoft Visual C++ Compiler 64bit | 与目标套件位数一致 |
| C compiler path | ...\VC\Tools\MSVC\14.16.29515\bin\Hostx64\x64\cl.exe |
C / C++ 两份都要填,指向同一个 cl.exe |
| C++ compiler path | 同上(cl.exe) | --- |
| C initialization | C:\Qt\Config\vcvars_v141_amd64.bat |
⬅ 指向 5.1.1 的包装 BAT |
| C++ initialization | C:\Qt\Config\vcvars_v141_amd64.bat |
两份 Initialization 填同一个 BAT |
配 32 位套件(msvc2017_32bit)时另克隆一份,Initialization 换用
vcvars_v141_x86.bat,cl.exe 换Hostx64\x86(交叉)或bin\(原生 32)目录。
5.1.3 ABI 不刷新的处理(必踩的坑)
填完 BAT 后如果 ABI 一栏不自动刷新(还是显示旧的 msvc2019 或为空):
- 不要死等自动检测------点 ABI 下拉选 自定义(Custom);
- 手动选择 MSVC 2017;
- 点 APPLY;
- 重新进入该项,此时 ABI 会自动选中第一项并刷新为
win_msvc2017_64。
ABI 标错会直接导致 Kit 页面判定"编译器与 Qt 版本不匹配"而报叹号------ABI 显示
win_msvc2017_64才算配置完成。
5.1.4 旧方案参考:直接指向工具集内 vcvars64.bat
若不用包装 BAT(例如机器上只有 VS2017),也可直接指工具集文件夹里的 vcvars64.bat,此时关键规则不变:
| 位置 | 填什么 | 举例(v141) |
|---|---|---|
| ① Name | 显示名 | MSVC v141 x64 |
| ② C/C++ compiler path | cl.exe 完整路径 | ...\VC\Tools\MSVC\14.16.29515\bin\Hostx64\x64\cl.exe |
| ③ Initialization | vcvars64.bat 完整路径 | ...\VC\Tools\MSVC\14.16.29515\bin\Hostx64\x64\vcvars64.bat |
② 和 ③ 必须指向同一个
14.xx工具集文件夹------这是叹号能否消除的关键;包装 BAT 方案(5.1.1)天然满足这一点,所以更稳。
两个易错点:
- 编译器路径填了 2019 的 cl.exe,Initialization 却填了 2017 的 BAT → 混搭 → 叹号
- Initialization 留空 → Qt Creator 无法初始化环境 → cl.exe 运行失败 → 叹号
5.2 Debuggers 页
自动检测一般能发现 cdb.exe;没有就手动 Add:
- 名称:
cdb64 - 路径:
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe
5.3 Qt Versions 页
- 若自动列表为空,点 Add ,指向套件的 qmake:
C:\Qt\5.14.2\msvc2017_64\bin\qmake.exe - 显示名应出现
Qt 5.14.2 MSVC2017 64bit,出现红色即路径错。
5.4 Kits 页:组装套件
新建或修改一个 Kit,字段按下表填:
| 字段 | 应选什么 | 避坑 |
|---|---|---|
| Name | Qt 5.14.2 MSVC2017 64bit(自描述) |
--- |
| Compiler | MSVC 2017 x64(即 5.1.2 克隆出来的那份) |
❌ 不要选 MinGW,也不要选自动检测的混版项 |
| Debugger | cdb.exe(Windows 调试器) |
❌ 不要选 GNU gdb |
| Qt version | Qt 5.14.2 MSVC2017 64bit |
必须与 Compiler 对应 |
| CMake tool | System CMake at ...\cmake.exe |
必须先装 CMake(qmake 项目可留空) |
修改后点 Apply → OK ,回到项目重新 Configure Project / 执行 qmake 。
Kit 页面右上角若全部项无叹号,即为配置成功。
5.5 MinGW 家族 Kit 完整配置(免装 VS 的路线)
MinGW 路线的最大优势:工具链全部由 Qt 安装器自带,不需要 VS,不需要 Windows SDK,不需要Initialization BAT,自动检测基本一次绿。
① 前提:安装时勾对组件
Qt 安装器 → Tools → 勾选 MinGW 7.3.0 64-bit ;Qt → 勾选 MinGW 7.3.0 64-bit 套件(即 mingw73_64)。
默认安装位置:
| 内容 | 路径 |
|---|---|
| MinGW 编译器 | C:\Qt\Tools\mingw730_64\bin\g++.exe( gcc.exe 同目录) |
| MinGW 调试器 | C:\Qt\Tools\mingw730_64\bin\gdb.exe |
| Qt MinGW 套件 | C:\Qt\5.14.2\mingw73_64\bin\qmake.exe |
② Compilers 页 :自动检测应出现 MinGW x64(C/C++ 各一项,指向 Tools 目录的 gcc/g++)。若没检测到,Add → MinGW:
| 字段 | 填写 |
|---|---|
| Name | MinGW 7.3.0 x64 |
| Platform | Microsoft Windows GCC (MinGW, MSYS2, MSVC) 选 64bit 对应项 |
| C compiler path | C:\Qt\Tools\mingw730_64\bin\gcc.exe |
| C++ compiler path | C:\Qt\Tools\mingw730_64\bin\g++.exe |
| ABI | 自动刷新为 win_mingw73_64;不刷新同样用 5.1.3 的 自定义 → APPLY 手法 |
| Initialization | 留空(MinGW 不需要环境脚本,这也是它比 MSVC 简单的原因) |
③ Debuggers 页 :Add → GDB,路径 C:\Qt\Tools\mingw730_64\bin\gdb.exe(自动检测通常能直接发现)。
④ Qt Versions 页 :Add → C:\Qt\5.14.2\mingw73_64\bin\qmake.exe,显示名 Qt 5.14.2 MinGW 64-bit。
⑤ Kits 页组装:
| 字段 | 应选什么 | 避坑 |
|---|---|---|
| Name | Qt 5.14.2 MinGW 64-bit |
--- |
| Compiler | MinGW x64(C 和 C++ 都是) |
❌ 不要选 MSVC |
| Debugger | GNU gdb(mingw730_64 里的 gdb.exe) |
❌ 不要选 cdb.exe |
| Qt version | Qt 5.14.2 MinGW 64-bit |
必须同家族,选 msvc 套件就是跨家族错配 |
| CMake tool | 同 MSVC Kit(qmake 项目可留空) | CMake 本体与编译器家族无关,可共用 |
开箱即用的
Desktop Qt 5.14.2 MinGW 64-bit默认 Kit 就是这套绑定,一般无需修改直接可用;上面手动配置用于默认 Kit 被删、被改坏或装多版本后环境混乱的情况。
MinGW 路线的取舍 :优点是零 VS 依赖、配置不会出叹号连环坑;代价是与只提供 MSVC 版 .lib 的第三方库(部分商业 SDK、protobuf 预编译包等)不兼容,且发布时需携带 MinGW 运行时 DLL。需要这类库时回到 MSVC 家族(5.1~5.4)。
5.6 MSVC 家族 Kit 组装汇总(cdb + qmake 三件套)
MSVC 路线在 5.1 完成编译器克隆后,剩下的绑定关系汇总成一张表(字段含义见 5.4):
| Kit 字段 | 绑定目标 | 实际文件位置 |
|---|---|---|
| Compiler | MSVC 2017 x64(5.1.2 克隆项) |
cl.exe + C:\Qt\Config\vcvars_v141_amd64.bat |
| Debugger | cdb64(5.2 手动项) |
Windows Kits\10\Debuggers\x64\cdb.exe |
| Qt version | Qt 5.14.2 MSVC2017 64bit(5.3 项) |
C:\Qt\5.14.2\msvc2017_64\bin\qmake.exe |
记法:编译器、调试器、Qt 库三者同家族同位数,编译器额外多一根"Initialization BAT 锁版本"的保险丝。MinGW 路线前两者同目录、天然成套;MSVC 路线三者来源三个地方(VS、SDK、Qt),所以才需要 5.1~5.4 逐项校齐。
5.7 配置原理小结(为什么必须这样配)
Kit 绿勾 = 四大要素齐备且 ABI 一致:
cl.exe(v141 x64) ──链接──> msvc2017_64 的 Qt5.lib (编译器 ABI 匹配)
vcvars64.bat ──设置──> INCLUDE/LIB 指向 Windows Kits\10
cdb.exe ──来自──> SDK Debugging Tools(与编译器版本无关)
qmake/cmake ──驱动──> 构建系统生成 Makefile/构建图
任何一环缺失,Qt Creator 的自动检测都会以叹号/红叉呈现------叹号不是"玄学",它精确对应"某一项没找到或某两项不匹配"。
六、常见错误与修复速查表
6.1 项目打开阶段
| 报错信息 | 可能原因 | 速查对策 |
|---|---|---|
Configure Project 显示 No suitable kits found |
没有可用 Kit | 检查 Compiler / Qt Version / CMake 是否都配好 |
MinGW ... cannot produce code for ... MSVC2017 ... |
编译器与 Qt 版本不匹配 | Kit Compiler 改为 MSVC(不是 MinGW) |
CMake executable not found |
未安装 CMake 或未加 PATH | 安装 CMake 并勾选 Add to PATH |
No compiler |
Kit 缺少编译器 | 在 Compilers 页手动添加 MSVC |
6.2 Kit/编译器叹号排查
| 叹号现象 | 原因 | 解决 |
|---|---|---|
| 编译器图标有叹号,但 Kit 是绿的 | 自动检测路径与 Initialization BAT 不匹配 | 按 5.1.2 克隆手动配置(MSVC);MinGW 则检查 gcc/g++ 是否在 Tools 目录 |
| Kit 有叹号,Debug 按钮灰色 | 没装 Windows SDK 或 CDB | VS Installer 勾选 Windows 10 SDK(带调试工具)或单独装 SDK |
Kit 有叹号,编译报 cl.exe 未找到 |
Initialization 留空或路径错 | 填上环境 BAT(如 C:\Qt\Config\vcvars_v141_amd64.bat)完整路径 |
Kit 有叹号,编译报 找不到头文件 |
SDK 没装或路径不对 | 确认 C:\Program Files (x86)\Windows Kits\10\Include\<版本>\ 存在 |
Kit 有叹号,链接报 LNK2019 |
编译器版本与 Qt 套件不匹配 | 换对应工具集(v141 配 msvc2017,v142 配 msvc2019) |
| 编译通过但无法调试 | CDB 缺失 | 重装 SDK,确保勾选 Debugging Tools for Windows |
| ABI 下拉不刷新、套件互认失败 | ABI 未识别 | 自定义 ABI 选 MSVC 2017 → APPLY → 重新检测 |
6.3 手动修复叹号的标准步骤
Tools → Options → Kits → Compilers- 找到 MSVC 编译器,检查:
- C 与 C++ 的 compiler path 是否指向同一个 cl.exe 目录
- Initialization 是否指向正确的环境 BAT(推荐用 5.1.1 的
-vcvars_ver=14.16包装 BAT)
- 自动检测项有叹号 → 按 5.1.2 克隆/新增 一份手动配置,ABI 按 5.1.3 刷新为
win_msvc2017_64 - 到
Kits页,把套件的编译器绑定到这份克隆出来的MSVC 2017 x64 - Apply → OK,重新打开项目 Configure Project,重建工程
6.4 构建阶段(目标名 / 生成器)
| 报错 / 现象 | 根因 | 速查对策 |
|---|---|---|
MSB 1009:找不到项目文件 all.vcxproj |
VS 多配置生成器下用了单配置的 all 目标 |
Build Steps 的 Targets 改 ALL_BUILD,并补 --config Debug/Release(见 4.3,案例见《构建排错实录》§1) |
| Release 构建出来却是 Debug 产物 | VS 多配置下 CMAKE_BUILD_TYPE 被忽略,又没传 --config |
构建命令显式加 --config Release |
| 改了 Generator 但构建行为没变 | 生成器写在 CMakeCache.txt 里,旧缓存仍生效 |
删 build 目录(或 Wipe Stash)后重跑 Configure,见 4.5 |
| 换生成器后报 target 名无效 | 在 VS / Ninja 之间切换时目标名没跟着换 | 单配置 all、VS 多配置 ALL_BUILD,见 4.3 |
七、Kit 配置彻底乱了:重置与清理
7.1 乱源
装过多个 Qt 版本后,Compilers 列表会被 python msvc、各种 MinGW、卸载残留搞得一团乱;而自动检测出来的项,界面里有时删不掉。
7.2 原理:Qt Creator 的配置持久化文件
Qt Creator 把所有自动检测到的 Kit、Qt 版本、编译器信息持久化在本地 XML。删除这些文件后,下次启动会重新扫描系统环境并生成全新的默认配置------这是官方推荐且最彻底的清理方式。
| 目录 | 文件 | 内容 |
|---|---|---|
%APPDATA%\QtProject\(Roaming) |
profiles.xml |
构建套件(Kit)配置 |
toolchains.xml |
编译器(工具链)信息 | |
qtversion.xml |
Qt 版本信息 | |
QtCreator.ini |
主配置(UI 布局、插件状态等) | |
%LOCALAPPDATA%\QtProject\qtcreator\(Local) |
整个文件夹 | 代码模型、索引、会话等缓存 |
⚠️ 删除这些文件不会 卸载 Qt SDK 或 Visual Studio,也不影响项目源代码;但会重置 Qt Creator 的所有个性化设置(快捷键、主题、窗口布局)。操作前务必备份。
7.3 手动重置步骤
- 完全关闭 Qt Creator(否则文件被占用删除失败)
- 资源管理器地址栏输入
%APPDATA%\QtProject回车,删除:
qtversion.xml、toolchains.xml、profiles.xml、QtCreator.ini - 进入
%LOCALAPPDATA%\QtProject,删除整个qtcreator文件夹 - 重新启动 Qt Creator,自动重新检测并生成干净的 Kit 列表
7.4 自动化脚本:reset_qt_creator.bat(完整源码)
将以下代码保存为 reset_qt_creator.bat,右键以管理员身份运行即可。
脚本逻辑说明:
- 路径检测 :用
%APPDATA%/%LOCALAPPDATA%环境变量自动定位两个配置目录 - 备份机制 :
xcopy完整复制到桌面带日期戳的文件夹(如QtCreator_Backup_20261029),删错了可拖回恢复 - 两种清理模式 :
- 模式 A(推荐) :仅删
profiles.xml(Kits)、toolchains.xml(编译器)、qtversion.xml(Qt 版本)、cmakekitinformation.xml+ Local 缓存------解决"Kit 无效/检测不到编译器",同时保留插件和最近项目 - 模式 B(彻底):删除整个 QtProject 文件夹------Qt Creator 恢复出厂状态,适合配置彻底损坏
- 模式 A(推荐) :仅删
- 缓存清理:无论哪种模式都清掉 Local 缓存,防止旧索引干扰重新检测
bat
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
:: ==========================================
:: Qt Creator 配置清理与备份工具
:: ==========================================
echo [1/4] 正在检测 Qt Creator 配置路径...
set "ROAMING_DIR=%APPDATA%\QtProject"
set "LOCAL_DIR=%LOCALAPPDATA%\QtProject"
set "BACKUP_DIR=%USERPROFILE%\Desktop\QtCreator_Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%"
if not exist "%ROAMING_DIR%" (
echo [错误] 未找到 Roaming 配置目录: %ROAMING_DIR%
pause
exit /b
)
echo [成功] 检测到配置目录: %ROAMING_DIR%
echo.
:: ==========================================
:: 步骤 2: 备份现有配置
:: ==========================================
echo [2/4] 正在备份配置到桌面...
echo 目标路径: %BACKUP_DIR%
xcopy "%ROAMING_DIR%" "%BACKUP_DIR%\Roaming\" /E /I /H /Y >nul
if exist "%LOCAL_DIR%" xcopy "%LOCAL_DIR%" "%BACKUP_DIR%\Local\" /E /I /H /Y >nul
if exist "%BACKUP_DIR%" (
echo [成功] 备份完成!如果出问题,请从桌面恢复。
) else (
echo [警告] 备份似乎失败了,请检查磁盘空间或权限。
pause
exit /b
)
echo.
:: ==========================================
:: 步骤 3: 选择清理模式
:: ==========================================
echo [3/4] 请选择清理模式:
echo A. [推荐] 仅重置 Kits/编译器/Qt版本 (保留插件和最近项目)
echo B. [彻底] 完全重置 (删除所有设置,包括插件和布局)
echo C. 退出
echo.
set /p choice="请输入选项 (A/B/C): "
if /i "%choice%"=="C" exit /b
:: ==========================================
:: 步骤 4: 执行删除
:: ==========================================
echo [4/4] 正在执行清理...
if /i "%choice%"=="A" (
echo -> 正在删除 Kits 和编译器配置...
if exist "%ROAMING_DIR%\qtcreator\profiles.xml" del /f /q "%ROAMING_DIR%\qtcreator\profiles.xml"
if exist "%ROAMING_DIR%\qtcreator\toolchains.xml" del /f /q "%ROAMING_DIR%\qtcreator\toolchains.xml"
if exist "%ROAMING_DIR%\qtcreator\qtversion.xml" del /f /q "%ROAMING_DIR%\qtcreator\qtversion.xml"
if exist "%ROAMING_DIR%\qtcreator\cmakekitinformation.xml" del /f /q "%ROAMING_DIR%\qtcreator\cmakekitinformation.xml"
:: 同时也清理 Local 目录下的缓存,防止旧缓存干扰
if exist "%LOCAL_DIR%\qtcreator" rd /s /q "%LOCAL_DIR%\qtcreator"
echo [成功] 配置文件已删除。
) else if /i "%choice%"=="B" (
echo -> 正在执行完全重置...
if exist "%ROAMING_DIR%" rd /s /q "%ROAMING_DIR%"
if exist "%LOCAL_DIR%" rd /s /q "%LOCAL_DIR%"
echo [成功] 所有配置已清空。
) else (
echo [错误] 无效选项。
pause
exit /b
)
echo.
echo ==========================================
echo 操作完成!
echo "请重新启动 Qt Creator,它将自动重新检测环境。"
echo ==========================================
pause
注意事项:
- 运行前确保 Qt Creator 已完全关闭(否则文件被占用删除失败)
- 通常不需要管理员权限,配置在受保护目录时建议"以管理员身份运行"
- 重置后丢了自定义配置?把桌面备份里对应
.xml拷回原处即可
八、一键诊断脚本
将以下代码保存为 qt-msvc-env-check.bat,双击运行,自动输出诊断报告:
- 检测所有已安装的 VS 版本和工具集文件夹(14.16 / 14.29)
- 检查
cl.exe、vcvars64.bat是否存在 - 检查 Windows SDK 版本和 CDB 调试器
- 检查 Qt 安装目录和各套件
qmake.exe - 生成报告,方便对照排查或发给他人求助
排查顺序建议:先跑诊断脚本确认底层组件齐不齐 → 缺什么按第二/四章补装 → 再按第五章配置 Kit → 还是乱就第七章重置。
8.1 诊断脚本完整源码(qt-msvc-env-check.bat)
bat
@echo off
setlocal EnableDelayedExpansion
title Qt + MSVC 环境诊断报告
chcp 936 >nul
echo ============================================================
echo Qt + MSVC 环境诊断报告
echo 生成时间: %date% %time%
echo ============================================================
echo.
echo [1] Visual Studio 安装检测
echo ----------------------------------------------------------
if exist "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" (
echo [vswhere] 已安装 VS Installer
for /f "delims=" %%v in ('"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -latest -property installationPath') do set VSROOT=%%v
echo 最新 VS 安装路径: !VSROOT!
) else (
echo [警告] 未找到 vswhere.exe,可能未安装 Visual Studio
)
echo.
echo [2] MSVC 工具集文件夹 (VC\Tools\MSVC\*)
echo ----------------------------------------------------------
rem 注意: if exist 在括号块内展开含 (x86) 的路径会导致判断失效,统一改用 call 子程序逐行判断
set FOUND=0
for %%R in ("C:\Program Files (x86)\Microsoft Visual Studio" "C:\Program Files\Microsoft Visual Studio") do call :SCANVS "%%~sR" "%%~R"
if "%FOUND%"=="0" echo [提示] 未找到任何 VC\Tools\MSVC 文件夹
echo.
echo [3] cl.exe 与 vcvars64.bat 检查 (vcvars64.bat 在 VC\Auxiliary\Build)
echo ----------------------------------------------------------
set VCFOUND=0
for %%R in ("C:\Program Files (x86)\Microsoft Visual Studio" "C:\Program Files\Microsoft Visual Studio") do call :SCANCL "%%~sR" "%%~R"
if "%VCFOUND%"=="0" echo [提示] 未找到任何工具集
echo.
echo [4] Windows SDK 检测
echo ----------------------------------------------------------
set SDKBASE=C:\Program Files (x86)\Windows Kits\10\Include
if exist "%SDKBASE%" (
for /d %%S in ("%SDKBASE%\*") do (
set SDKVER=%%~nxS
echo [SDK] !SDKVER!
)
) else (
echo [警告] 未找到 Windows SDK 安装路径
)
echo.
echo [5] CDB 调试器检测 (Debuggers 在 Windows Kits\10 下,与 Include 同级)
echo ----------------------------------------------------------
set KITSBASE=C:\Program Files (x86)\Windows Kits\10
set CDBFOUND=0
if exist "%KITSBASE%\10.0.19041.0\Debuggers\cdb.exe" (
echo [OK] Windows SDK 10.0.19041.0 自带 CDB 调试器
set CDBFOUND=1
) else (
echo [缺失] 未找到 10.0.19041.0 的 CDB
)
rem 检查其他 SDK 版本是否带 CDB(含 x64 子目录)
if exist "%KITSBASE%\Include" (
for /d %%S in ("%KITSBASE%\10.0.*") do (
set SDKV=%%~nxS
if not "!SDKV!"=="10.0.19041.0" (
if exist "%%~dpnS\Debuggers\cdb.exe" (
set CDBFOUND=1
echo [OK] !SDKV! 自带 CDB
)
if exist "%%~dpnS\Debuggers\x64\cdb.exe" (
set CDBFOUND=1
echo [OK] !SDKV! 自带 CDB (x64)
)
)
)
)
if "%CDBFOUND%"=="0" echo [提示] 各 SDK 均未安装 Debuggers 组件,可在 VS Installer / Windows SDK 配置中勾选 "Debugging Tools for Windows"
echo.
echo [6] Qt 安装检测
echo ----------------------------------------------------------
set QTDIRS="C:\Qt" "D:\Qt" "E:\Qt" "C:\Program Files\Qt"
for %%Q in (%QTDIRS%) do (
if exist "%%~dpnQ" (
echo 发现 Qt 根目录: %%~dpnQ
for /d %%B in ("%%~dpnQ\*") do (
echo - %%~nxB
)
)
)
echo.
echo [7] Qt 各套件 qmake 检测
echo ----------------------------------------------------------
set QMAKEFOUND=0
for %%Q in (%QTDIRS%) do call :SCANQM "%%~sQ" "%%~Q"
if "%QMAKEFOUND%"=="0" echo [提示] 未检测到任何 qmake.exe
echo.
echo ============================================================
echo 诊断结束
echo 下一步: 把本报告与实际 Qt Creator 的
echo Tools ^> Options ^> Kits 截图一起发给别人排查
echo ============================================================
pause
goto :EOF
rem ============ 子程序: 扫描 VS 工具集文件夹 ============
:SCANVS
rem 规律: dir /b 返回裸名称,路径用 %~1(短路径根)+裸名手工拼接; 展示用 %~2(长路径根); 含空格展开必须加引号,先存变量再 call echo
for /f "delims=" %%Y in ('dir /b /ad "%~1\20*" 2^>nul') do (
for /f "delims=" %%E in ('dir /b /ad "%~1\%%~nY\*" 2^>nul') do (
if exist "%~1\%%~nY\%%~nE\VC\Tools\MSVC" (
for /f "delims=" %%V in ('dir /b /ad "%~1\%%~nY\%%~nE\VC\Tools\MSVC\*" 2^>nul') do (
set FOUND=1
set VERNAME=%%~nxV
set TAG=[其他]
echo !VERNAME! | findstr /r "^14\.16\..*$" >nul && set TAG=[v141] 对应 VS2017 工具集
echo !VERNAME! | findstr /r "^14\.2[0-9]\..*$" >nul && set TAG=[v142] 对应 VS2019 工具集
set "LINE=!TAG! %%~nY\%%~nE\%%~nxV : %~2\%%~nY\%%~nE\VC\Tools\MSVC\%%~nxV"
call echo %%LINE%%
)
)
)
)
exit /b
rem ============ 子程序: 扫描 cl.exe 与 vcvars64.bat ============
:SCANCL
for /f "delims=" %%Y in ('dir /b /ad "%~1\20*" 2^>nul') do (
for /f "delims=" %%E in ('dir /b /ad "%~1\%%~nY\*" 2^>nul') do (
set VCFOUND=1
set "VCVARS=%~2\%%~nY\%%~nE\VC\Auxiliary\Build\vcvars64.bat"
set "VCHECK=%~1\%%~nY\%%~nE\VC\Auxiliary\Build\vcvars64.bat"
if exist "!VCHECK!" (
set "LINE=[OK] %%~nE vcvars64.bat: !VCVARS!"
call echo %%LINE%%
) else (
echo [缺失] %%~nE 缺少 vcvars64.bat ^(VC\Auxiliary\Build^)
)
for /f "delims=" %%V in ('dir /b /ad "%~1\%%~nY\%%~nE\VC\Tools\MSVC\*" 2^>nul') do (
set "CLCHECK=%~1\%%~nY\%%~nE\VC\Tools\MSVC\%%~nxV\bin\Hostx64\x64\cl.exe"
if exist "!CLCHECK!" (
set "LINE=[OK] %%~nxV cl.exe 存在: %~2\%%~nY\%%~nE\VC\Tools\MSVC\%%~nxV\bin\Hostx64\x64\cl.exe"
call echo %%LINE%%
) else (
echo [缺失] %%~nxV 缺少 cl.exe ^(Hostx64\x64^)
)
)
)
)
exit /b
rem ============ 子程序: 扫描 Qt 套件 qmake.exe ============
:SCANQM
rem 结构 1: Qt\5.1x.x\msvc2015_64\bin\qmake.exe (dir /b 返回裸名,用 %~1\裸名 拼接)
for /f "delims=" %%V in ('dir /b /ad "%~1\5.1*" 2^>nul') do (
for /f "delims=" %%K in ('dir /b /ad "%~1\%%~nxV\*" 2^>nul') do (
if exist "%~1\%%~nxV\%%~nxK\bin\qmake.exe" (
set QMAKEFOUND=1
set "LINE=[OK] %%~nxV\%%~nxK : %~2\%%~nxV\%%~nxK\bin\qmake.exe"
call echo %%LINE%%
)
)
)
rem 结构 2: Qt\Qt5.14.2\5.14.2\msvc2015_64\bin\qmake.exe (多一层安装目录)
for /f "delims=" %%V in ('dir /b /ad "%~1\Qt5.1*" 2^>nul') do (
for /f "delims=" %%W in ('dir /b /ad "%~1\%%~nxV\5.1*" 2^>nul') do (
for /f "delims=" %%K in ('dir /b /ad "%~1\%%~nxV\%%~nxW\*" 2^>nul') do (
if exist "%~1\%%~nxV\%%~nxW\%%~nxK\bin\qmake.exe" (
set QMAKEFOUND=1
set "LINE=[OK] %%~nxV\%%~nxW\%%~nxK : %~2\%%~nxV\%%~nxW\%%~nxK\bin\qmake.exe"
call echo %%LINE%%
)
)
)
)
exit /b
脚本中的两条批处理避坑注释(原作者实战踩坑)值得留意:
if exist在括号块内展开含(x86)的路径会导致判断失效,需改用call子程序逐行判断;dir /b返回裸名称,路径要用短路径根(%~s1)+ 裸名手工拼接,含空格展开必须加引号后再call echo。
九、快速检查清单(✅ 全部打勾才能构建)
先选家族(见 5.0):走 MinGW 路线只核对 M 组;走 MSVC 路线核对下方「MSVC 路线专有项」全部条目。
M. MinGW 路线(两家族共用的基础项 + MinGW 专有)
- Qt 5.14.2 已勾选 MinGW 7.3.0 64-bit 套件与 Tools 组件
-
C:\Qt\Tools\mingw730_64\bin\g++.exe、gdb.exe实际存在 -
C:\Qt\5.14.2\mingw73_64\bin\qmake.exe存在 - Kit:Compiler = MinGW x64、Debugger = GNU gdb、Qt version = MinGW 64-bit(三者同家族,Initialization 留空)
MSVC 路线专有项
- VS Installer 已勾选 MSVC v141 - VS 2017 C++ 生成工具(用 msvc2017_64 套件时)或 v142
- Windows 10 SDK 已安装且带 Debugging Tools (推荐
10.0.19041.0,或单独装 SDK 勾选调试工具) -
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe实际存在 - CMake 已安装(3.27.x 稳定版)并加入系统 PATH,
cmake --version可输出 - CMake Generator 已按 4.4 选定(推荐 Ninja + vcvars 包装 BAT );ninja.exe / jom.exe 已放到
C:\Qt\Tools\...且可用 - Qt 5.14.2 已勾选 MSVC 2017 64-bit 组件,
C:\Qt\5.14.2\msvc2017_64\bin\qmake.exe存在 -
C:\Qt\Config\vcvars_v141_amd64.bat已创建,CMD 验证call ... && cl输出 14.16 版本(见 5.1.1) - Qt Creator Compilers 页:已按 5.1.2 克隆 出
MSVC 2017 x64,C/C++ 两份 compiler path 指向同一 cl.exe,两份 Initialization 指向C:\Qt\Config\vcvars_v141_amd64.bat(-vcvars_ver=14.16包装 BAT),ABI 显示win_msvc2017_64 - Qt Creator Kits 页:目标 Kit 的 Compiler 是 MSVC(非 MinGW)、Debugger 是 cdb.exe(非 GDB)、Qt version 是 5.14.2 MSVC2017 64bit
- 修改后点击 Apply → OK ,重新 Configure Project,Kit 无叹号
两条路线都适用:两个 Kit 并存时各自按上表分组核对;项目左下角选对应 Kit 即可。
十、Qt 5.14 vs Qt 5.15 选型与差异
10.1 配置差异对照
| 项目 | Qt 5.14 | Qt 5.15 |
|---|---|---|
| 官方推荐构建 | qmake 为主 | CMake 被官方扶正 |
| MSVC 套件命名 | msvc2017_64 / msvc2019_64 | msvc2017_64 / msvc2019_64 |
| 编译器要求 | v141 (VS2017) / v142 (VS2019) | 同上 |
| CMake 目标写法 | 只能用 Qt5::Widgets(带版本号) |
可用 Qt::Widgets(无版本号,与 Qt6 兼容) |
| CMake 无版本目标 | 不支持 | 5.15 引入 |
| AUTOMOC 改进 | 基础版 | 改进版(配合 CMake 3.17) |
| 开源版本终点 | 5.14.2 是该分支最后补丁版 | 5.15.2 是 Qt5 最后开源版 |
总结:
- Qt 5.14.2 msvc2017_64 套件 → v141 编译器 →
14.16.xxx文件夹 - Qt 5.15.2 msvc2019_64 套件 → v142 编译器 →
14.29.xxx文件夹 - 两者共用同一个 Windows SDK(19041)即可;核心差异在 CMake 写法,不影响 qmake 项目
10.2 版本选型决策树
你的项目情况?
├─ 必须留在 Qt 5(老项目/合规要求)
│ ├─ 需要长期维护? → 5.15.2 LTS(Qt5 最后开源版)
│ └─ 只是短期用? → 5.14.2(教程多、生态成熟)
├─ 可以升级 Qt 6
│ └─ 直接上 Qt 6.2+ + CMake(别在 Qt 5 里折腾了)
└─ 嵌入式/静态交叉编译
└─ 确认 Qt 是否带 CMake config,否则用 qmake
附录:文档使用说明
本指南为完全自包含文档:
- 第五章 Kit 配置、第六/七章排错与重置流程覆盖了 Qt + MSVC 环境从零搭建到故障修复的全链路;
- 第七章内联了清理重置脚本
reset_qt_creator.bat的完整源码; - 第八章内联了环境诊断脚本
qt-msvc-env-check.bat的完整源码; - 需要使用时直接将对应代码块保存为
.bat文件运行即可,无需依赖任何外部附件。
延伸阅读
三篇文档分工固定,规律写进手册,踩坑案例留在实录:
| 文档 | 管什么 | 性质 |
|---|---|---|
| 本文(① 环境侧) | Kit 能不能绿:VS/Qt 安装、Kit 双家族、CMake 生成器、常见错误与重置 | 正向规范:应该怎么配 |
| ② 《Qt 工程创建与 CMake/qmake 构建规范》 | 工程长什么样:两套构建系统选型、.pro/.pri 与 CMakeLists.txt 骨架、目录结构与命名、第三方库与 windeployqt 打包 |
正向规范:应该怎么建 |
| ③ 《Qt 构建排错实录》 | 具体某次踩坑的现象、复现与修复(如 MSB 1009、生成器换型、切 Ninja) |
反向后验:出问题怎么修 |
工程手册内容包含:qmake 与 CMake 选型对齐、.pro/.pri 与 CMakeLists.txt 骨架、目录结构与命名规范、第三方库接入与 windeployqt 打包脚本。