4. 编译环境搭建(Windows篇)

Windows 下编译 QGC,说白了就两条路:MSVC 和 MinGW。我两个都用过,踩过不少坑。今天我把经验摊开讲,你照着做就行。

4.1 编译器选型:MSVC vs MinGW

先别急着装,搞清楚区别再动手。我刚开始也纠结过,后来发现选错了后面全是泪。

对比项 MSVC MinGW
官方推荐 是(QGC 主推) 否(社区方案)
调试体验 完美(VS 集成) 一般(GDB 凑合)
编译速度 快(多核优化好) 慢(单线程居多)
兼容性 Qt 官方二进制匹配 偶尔链接报错
部署难度 低(装好 VS 就行) 高(要配环境变量)

我的建议:新手无脑选 MSVC。我在项目中见过太多人用 MinGW 折腾半天,最后换回 MSVC 半小时搞定。

4.2 MSVC 环境搭建(推荐)

4.2.1 安装 Visual Studio

QGC 目前要求 VS 2019 或 2022。我个人习惯用 2022,社区版免费,够用。

  1. 去官网下载 Visual Studio 2022 Community
  2. 安装时勾选「使用 C++ 的桌面开发」工作负载
  3. 右侧「单个组件」里确保勾上:
    • MSVC v143 生成工具(x64/x86)
    • Windows 10 SDK(或 11 SDK)
    • C++ CMake 工具(可选,但建议装)
  4. 安装路径别改,默认 C 盘就行

注意:安装完一定要重启。我曾经偷懒没重启,结果 cmake 死活找不到编译器,折腾了半小时才发现。

4.2.2 配置 Qt 与 MSVC 的绑定

Qt 安装时记得勾选对应 MSVC 版本的组件。比如你装 VS 2022,Qt 里就要选 MSVC 2019 64-bit 或 MSVC 2022 64-bit。

# 验证 MSVC 是否可用
打开 "x64 Native Tools Command Prompt for VS 2022"
输入:cl
看到 Microsoft (R) C/C++ Optimizing Compiler 版本号 → 成功

嗯,这里要注意:Qt Creator 里要手动设置编译器路径。我见过有人装完 VS 但 Qt Creator 还是用的 MinGW,编译报一堆 undefined reference。

4.2.3 常见 MSVC 编译错误及解决

我整理了几个高频错误,你遇到了直接对照查。

错误信息 原因 解决方案
fatal error C1083 找不到头文件 检查 include 路径,确认 Qt 安装正确
LNK2019 unresolved external symbol 链接库缺失 在 .pro 文件里加 LIBS += ...
error C2664 参数类型不匹配 检查函数签名,QGC 代码有时用旧 API
fatal error LNK1104 无法打开 .lib 文件 关闭杀毒软件,或以管理员运行

避坑指南:我曾经遇到 LNK2019,查了半天发现是 Qt 版本和 MSVC 不匹配。Qt 5.15.2 配 VS 2022 没问题,但 Qt 5.12 就报错。记住:Qt 版本别太老。

4.3 MinGW 环境搭建(备选)

如果你非要用 MinGW,也行。但我要说一句:QGC 官方对 MinGW 的支持越来越弱,很多新功能只在 MSVC 上测试。

4.3.1 安装 MinGW

  1. 下载 Qt 在线安装器,选择 MinGW 8.1.0 64-bit 组件
  2. 或者单独下载 MinGW-w64(推荐用 Qt 自带的,版本匹配)
  3. 把 mingw64/bin 加到系统 PATH
# 验证 MinGW
打开 cmd,输入:g++ --version
看到 g++ (MinGW.org GCC Build-20200218) 8.1.0 → 成功

4.3.2 MinGW 编译 QGC 的坑

我踩过的坑,列出来给你省时间。

  • 链接速度慢:MinGW 的 ld 比 MSVC 的 link 慢 3-5 倍,第一次编译 QGC 可能要 40 分钟
  • 中文路径报错:MinGW 对中文路径支持差,项目路径不要有中文
  • Qt Charts 模块缺失:有些 MinGW 发行版没带 Qt Charts,要手动编译
  • Debug 模式崩溃:MinGW 的 debug 库有时和 QGC 的断言冲突

警告:如果你用 MinGW 编译时遇到 undefined reference to `__imp_...',八成是库文件格式不对。MinGW 需要 .a 文件,不是 .lib。我曾经在这上面浪费了一整天。

4.4 核心流程:从源码到可执行文件

不管用哪个编译器,流程都一样。我画了张图,你一看就明白。

QGC 编译流程(Windows) 源码克隆 子模块更新 CMake 配置 编译(nmake/jom) 生成 .exe 关键点 • 用 git clone --recursive • 子模块必须完整 • CMake 选对 generator 常见失败点 • Qt 路径没配 • 编译器位数不匹配 • 缺少依赖库

4.5 实战:完整编译命令

我直接给你能跑的代码。假设你用的是 MSVC。

# 1. 克隆源码(带子模块)
git clone --recursive https://github.com/mavlink/qgroundcontrol.git
cd qgroundcontrol

# 2. 创建构建目录
mkdir build_msvc
cd build_msvc

# 3. CMake 配置(64位 Release)
cmake .. -G "Visual Studio 17 2022" -A x64 ^
    -DCMAKE_PREFIX_PATH=C:/Qt/5.15.2/msvc2019_64 ^
    -DCMAKE_BUILD_TYPE=Release

# 4. 编译(用 jom 加速)
jom -j8

# 5. 编译完成后,在 build_msvc/staging 目录找 exe

小技巧:第一次编译建议用 jom -j4,别贪多。我试过 -j16,结果内存爆了,编译到一半卡死。8 核 CPU 用 -j8 最稳。

4.6 环境验证清单

编译前,花 5 分钟检查一下。我每次搭新环境都按这个来。

检查项 命令 预期结果
编译器 cl /? 或 g++ --version 显示版本号
CMake cmake --version ≥ 3.16
Qt qmake --version 显示 Qt 版本
Git git --version ≥ 2.20
Python python --version ≥ 3.6(用于构建脚本)

最后说一句:Windows 编译 QGC 最稳的组合是 VS 2022 + Qt 5.15.2 MSVC 2019 64-bit。我前后搭过不下 20 次环境,这个组合从来没翻过车。MinGW 能跑,但没必要跟自己过不去。