Qt 构建排错实录:从 MSB 1009 到生成器选型
系列导航|Qt 5.14.2 + VS2019 实战三篇
③ 构建排错实录(本篇,持续追加)
文档定位:三篇中的第三篇,独立成文,不并入手册。 理由是两者生命周期不同:手册是"应该怎么配"的稳定规范,排错实录是"出问题怎么修"的持续增量病例库;合并会让手册因每次踩坑而被动改版,也会把规范条文和流水账混在一起。
| 文档 | 管什么 | 性质 |
|---|---|---|
| ① 环境搭建与 Kit 修复指南 | Kit 能不能绿、生成器怎么选、CMake/Qt 怎么装 | 正向规范:应该怎么配 |
| ② 工程创建与 CMake/qmake 构建规范 | 目录/命名/构建脚本、两套构建系统骨架 | 正向规范:应该怎么建 |
| ③ 本文(排错实录) | 具体某次踩坑的复现、根因与修复 | 反向后验:出问题怎么修 |
一条硬规则:规律写进手册,案例留在本文。 凡是"换个工程也成立"的结论(如"单配置用
all、VS 多配置用ALL_BUILD"),已上收到环境手册 4.3 / 6.4;本文只保留当时的复现过程,与手册重复的操作步骤一律给链接,不双份维护。
症状索引
| 症状 / 错误码 | 触发场景 | 条目 |
|---|---|---|
MSB 1009:找不到项目文件 all.vcxproj |
Qt Creator + VS2019 生成器构建 | [§1](#症状 / 错误码 触发场景 条目 MSB 1009:找不到项目文件 all.vcxproj Qt Creator + VS2019 生成器构建 §1 不清楚生成器该配什么参数 / Build、Clean 命令怎么写 生成器选型、命令行验证 §2 想把 VS 生成器换成 Ninja 提速 / 避开 VS 生成器坑 §3) |
| 不清楚生成器该配什么参数 / Build、Clean 命令怎么写 | 生成器选型、命令行验证 | [§2](#症状 / 错误码 触发场景 条目 MSB 1009:找不到项目文件 all.vcxproj Qt Creator + VS2019 生成器构建 §1 不清楚生成器该配什么参数 / Build、Clean 命令怎么写 生成器选型、命令行验证 §2 想把 VS 生成器换成 Ninja 提速 / 避开 VS 生成器坑 §3) |
| 想把 VS 生成器换成 Ninja | 提速 / 避开 VS 生成器坑 | [§3](#症状 / 错误码 触发场景 条目 MSB 1009:找不到项目文件 all.vcxproj Qt Creator + VS2019 生成器构建 §1 不清楚生成器该配什么参数 / Build、Clean 命令怎么写 生成器选型、命令行验证 §2 想把 VS 生成器换成 Ninja 提速 / 避开 VS 生成器坑 §3) |
1. MSB 1009 错误(Qt Creator + VS2019 生成器)
1.1 现象
- 使用 Qt Creator 搭配 Visual Studio 16 2019 生成器构建时,构建步骤中目标为
all,报 MSB 1009 项目文件找不到错误。 - 将构建指令从
all修改为ALL_BUILD后即可顺利构建成功。 - 如果使用其他生成器(Ninja / NMake / MinGW Makefiles),目标仍应使用
all。
1.2 根因分析
生成器与构建目标不匹配,代码和 CMakeLists 都没有问题。
- 构建目录是用
Visual Studio 16 2019 -A x64生成的,但 Qt Creator 的构建步骤里目标被固定为all。 all只属于 Makefile / Ninja 系列生成器;VS 生成器里的聚合目标叫ALL_BUILD。cmake --build . --target all会把all原样转给 MSBuild,MSBuild 把它当成项目文件all.vcxproj去找,于是报 MSB 1009。
1.3 验证过程
| 验证项 | 结果 |
|---|---|
CMakeCache.txt |
确认生成器为 Visual Studio 16 2019 |
| 构建目录内容 | 存在 QServer.sln、ALL_BUILD.vcxproj、QServer.vcxproj |
手动执行 --target all |
可稳定复现同样的 MSB 1009 |
改为 cmake --build . --target ALL_BUILD --config Debug |
编译成功,已生成 Debug\QServer.exe;clean 目标也正常 |
附加发现:原构建目录缺少
ZERO_CHECK.vcxproj(.sln引用了它),属于上次 CMake 生成不完整;已重跑一次 CMake 生成补齐。这一点与本次 MSB 1009 错误无关。
1.4 修复方法(保留 VS2019 生成器)
路径:Qt Creator → Projects(项目)→ Build & Run(构建和运行)→ 选中该 Kit → Build(构建)→ Build Steps(构建步骤)→ CMake Build
配置界面如下图所示(展开构建步骤的"详情"面板,在 Targets 列表中勾选 ALL_BUILD):

具体设置:
| 步骤 | Targets | Additional arguments |
|---|---|---|
| Build 步骤 | all 改为 ALL_BUILD |
--config Debug(Release 目录用 --config Release) |
| Clean 步骤 | 保持 clean |
同样加 --config Debug |
补充说明:
- CMake Configuration 里的
CMAKE_BUILD_TYPE不需要动------VS 多配置生成器会忽略它。 - 不需要重新生成,也不需要修改
CMakeLists.txt。 - 改完后实际执行的命令为:
text
cmake.exe --build . --target ALL_BUILD --config Debug
cmake.exe --build . --target clean --config Debug
- 注意 :Qt Creator 4.11.1 不会自动附加
--config,所以 Release 构建目录一定要自己加,否则 MSBuild 会按.sln默认的 Debug 配置构建。
1.5 建议
Qt Creator 4.11.1 对 VS 生成器的支持不完整(本次日志中的 cmake --build 也没带 --config):
- 如果主要在 Qt Creator 里开发:删掉当前 build 目录、改用 Ninja 生成器会更稳(目标继续用
all),详见 §3。 - 如果主要用 VS2019 :直接打开生成的
QServer.sln构建更顺。
2. 不同生成器对应配置速查
2.1 这些参数在 Qt Creator 里分别配在哪
本节是环境手册 4.5(Qt Creator 里的 CMake 工具与构建步骤配置) 的配图版:字段含义以手册 4.5 为准,这里只补截图。
下列命令行参数不需要手敲,Qt Creator 分两处配置:
① -G 和 -A x64 → CMake Generator 对话框
路径:Projects(项目)→ Build & Run → 选中该 Kit → Configure Steps(配置步骤)→ 点击 CMake 一行右侧的 Change Producers / 直接编辑 → Generator,如下图所示:

| 对话框字段 | 对应命令行参数 | 本例取值 |
|---|---|---|
| Executable | 使用的 cmake 程序 | C:\Program Files\CMake\bin\cmake.exe |
| Generator | -G "..." |
Visual Studio 16 2019 |
| Platform | -A x64 |
x64 |
| Toolset | -T host=x64 等工具集 |
留空即可 |
② -DCMAKE_BUILD_TYPE=... → Configure Settings 参数表
路径:Projects → Build & Run → 该 Kit → Build 页 → CMake Configuration 面板 ,直接编辑/添加 CMAKE_BUILD_TYPE 这一项(Debug 或 Release)。
注意:VS 多配置生成器下
CMAKE_BUILD_TYPE会被忽略,实际构建哪个配置由 Build 步骤的--config Debug/Release决定(见 §1.4)。
2.2 参数速查表
| 生成器 | 类型 | 适用套件 | CMake 配置参数 | Build 命令 | Clean 命令 |
|---|---|---|---|---|---|
| Ninja | 单配置 | MSVC / MinGW(Qt Creator 推荐) | -G Ninja -DCMAKE_BUILD_TYPE=Debug |
cmake --build . --target all |
cmake --build . --target clean |
| NMake Makefiles JOM | 单配置 | MSVC(没有 Ninja 时) | -G "NMake Makefiles JOM" -DCMAKE_BUILD_TYPE=Debug |
同上 | 同上 |
| MinGW Makefiles | 单配置 | MinGW 套件 | -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug |
同上 | 同上 |
| Visual Studio 16 2019 | 多配置 | MSVC + 需要 .sln / VS2019 | -G "Visual Studio 16 2019" -A x64,配置列表看 CMAKE_CONFIGURATION_TYPES |
cmake --build . --target ALL_BUILD --config Debug |
cmake --build . --target clean --config Debug |
关键区别:
- 单配置生成器 :用
CMAKE_BUILD_TYPE决定 Debug/Release,构建时不需要--config。 - 多配置生成器(VS 系列) :
CMAKE_BUILD_TYPE无效,靠--config在构建时选择配置。
3. 如果以后换成 Ninja
不能只改步骤命令------生成器写在 CMakeCache.txt 里,切换步骤:
- 换一个新的 build 目录(或删掉当前目录重新配置);
- 在 §2.1 的 CMake Generator 对话框中选择 Ninja 生成器(相当于
-G Ninja); - 把 Build/Clean 步骤的 Targets 改回
all/clean; - 在 CMake Configuration 里用
CMAKE_BUILD_TYPE=Debug指定配置。
日常在 Qt Creator 里开发,Ninja 比 VS 生成器稳妥。