第一次尝试在Windows上编译QGroundControl(QGC)时,我花了整整两天时间解决各种报错问题。从Qt版本冲突到子模块更新失败,再到MSVC编译器特有的警告处理,每一步都可能成为新手开发者的"拦路虎"。本文将分享一套经过实战验证的完整流程,帮助无人机开发者和学生绕过这些陷阱,一次性完成QGC 4.4稳定版的编译。
QGC 4.4稳定版对工具链有严格要求,任何版本偏差都可能导致编译失败。以下是经过验证的组合:
| 组件 | 推荐版本 | 备注 |
|---|---|---|
| Qt | 5.15.2 | 必须包含MSVC 2019组件 |
| MSVC编译器 | Visual Studio 2019 | 需安装C++桌面开发工作负载 |
| Windows SDK | 10.0.19041.0 | 建议通过VS安装器完整获取 |
| Git | 2.40.0或更新 | 用于处理子模块递归克隆 |
安装Qt时特别注意勾选:
官方文档中简单的git clone命令在实际操作中常因网络问题失败。这里推荐两种可靠方案:
方案A:分步克隆(推荐)
bash复制# 先克隆主仓库(不包含子模块)
git clone -b Stable_V4.4 https://github.com/mavlink/qgroundcontrol.git
cd qgroundcontrol
# 使用国内镜像加速子模块更新
git config --global url."https://hub.fastgit.org".insteadOf https://github.com
git submodule update --init --recursive
方案B:存档下载(网络不稳定时备用)
libs/mavlink子模块的zip提示:若子模块更新卡顿,可尝试修改
.gitmodules文件中的URL为国内镜像地址(如https://gitee.com/mirrors/mavlink.git)
打开qgroundcontrol.pro前,需确保Qt Creator正确识别了工具链:
工具 → 选项 → Kits常见配置错误排查:
%QT_DIR%\5.15.2\msvc2019_64\bin\qmake.exe在Projects → Build Settings中调整以下关键参数:
plaintext复制构建目录:建议设为../build-QGC(避免源码污染)
构建步骤:添加自定义qmake参数 CONFIG+=installer
环境变量:追加 PATH=%QT_DIR%\Tools\QtCreator\bin
对于8GB以下内存的设备,建议修改.pro文件:
qmake复制# 添加内存优化选项
QMAKE_CXXFLAGS += /Zm500
QMAKE_LFLAGS += /LARGEADDRESSAWARE
MSVC特有的/WX(视警告为错误)和/W3(警告等级)常导致编译中断。不同于简单删除这些标志,更专业的做法是:
QGCCommon.pri中的警告设置qmake复制# 原始设置
# QMAKE_CXXFLAGS_WARN_ON += /WX /W3
# 优化设置(允许特定警告)
QMAKE_CXXFLAGS_WARN_ON += /W3 /wd4068 /wd4996
其中/wd开头的参数用于禁用特定警告编号,常见可忽略的警告包括:
当出现"missing vcruntime140.dll"等错误时,需要部署VC运行库:
bash复制# 使用Qt自带的部署工具
windeployqt --compiler-runtime qgroundcontrol.exe
对于更复杂的依赖问题,可手动检查:
Dependencies工具中分析exe文件%VCINSTALLDIR%redist\MSVC\14.xx复制到输出目录修改主界面标题的正确姿势不是直接硬编码,而是通过资源系统实现:
qgcresources.qrc中添加字符串资源xml复制<qresource>
<string name="app_title">我的无人机控制站</string>
</qresource>
MainRootWindow.qml中引用:qml复制title: qsTrId("app_title")
官方推荐的汉化方法存在更新丢失风险。更健壮的做法:
translations/qgc_zh.ts.pro文件自动包含:qmake复制TRANSLATIONS += $$PWD/translations/qgc_zh.ts
bash复制lupdate qgroundcontrol.pro -no-obsolete
linguist translations/qgc_zh.ts
lrelease translations/qgc_zh.ts
要为QGC开发自定义插件,需要配置独立开发环境:
bash复制python3 tools/create_plugin.py MyPlugin --output=../QGCPlugin
customPlugins.pri中添加:qmake复制include($$PWD/../QGCPlugin/MyPlugin/MyPlugin.pri)
bash复制mkdir build-shadow
cd build-shadow
qmake ../qgroundcontrol.pro "QGC_SHADOW_BUILD=ON"