Part 1:仓库文件夹各自的作用

顶层 10 个文件夹

文件夹

作用

android/

Android 平台资源(manifest / gradle / res)

cmake/

构建模块库(CPM / Create* / Install / PrintSummary 等 17 个 .cmake)

custom-example/

fork 模板示例(每个想做 fork 的人都该看)

deploy/

9 个平台的打包脚本 + 资源

docs/

文档

resources/

应用资源(图标 / 图片 / SVG / 字体引用等)

src/

源代码主体,30 个子模块

test/

测试,16 个子模块

tools/

开发辅助脚本

translations/

翻译

Part 2:cmake/ 目录 —— 17  .cmake  QGC 构建系统的灵魂

cmake/ 目录里的文件按功能分 5 组。

2.1 Install / 打包脚本(11 个,占了一半)

这一组是 QGC "一次构建多平台打包"能力的实现。以前用 qmake 时这块全要手写 shell/Python,现在 CPack 接管了。

文件

作用

CreateAppImage.cmake

Linux AppImage 打包

CreateCPackArchive.cmake

通用 archive

CreateCPackBundle.cmake

macOS bundle

CreateCPackCommon.cmake

CPack 通用配置

CreateCPackDMG.cmake

macOS DMG

CreateCPackDeb.cmake

Linux .deb

CreateCPackIFW.cmake

Qt Installer Framework

CreateCPackNSIS.cmake

Windows NSIS installer

CreateCPackProductBuild.cmake

macOS productbuild

CreateCPackRPM.cmake

Linux .rpm

CreateMacDMG.cmake

macOS DMG(macdeployqt 风)

CreateQGCInstaller.cmake

总入口,根据平台分发

CreateWinInstaller.cmake

Windows installer(NSIS 风)

2.2 构建工具脚本(5 个)

文件

作用

CustomOptions.cmake

编译时的方向盘 —— 所有 QGC_* 选项定义(后面 Part 6 详讲)

Git.cmake

Git 集成,自动取版本号塞进 build 信息(About 里的 hash 就来自这里)

Install.cmake

安装规则集中地(install() 调用)

PrintSummary.cmake

配置后打印一个摘要(哪些 option 开了)

SignMacBundle.cmake

macOS 代码签名

2.3 cmake/modules/ —— 内嵌库(4 个)

文件

作用

CPM.cmake

CPM 包管理器主体(自带,不需要额外装)

get_cpm.cmake

CPM 引导脚本

IWYU.cmake

include-what-you-use(代码清洁度工具)

vulkan.cmake

Vulkan 配置(未启用,留代码)

2.4 cmake/find-modules/ —— 找包(3 个)

文件

作用

FindGStreamer.cmake

GStreamer 找包(支持 Android/iOS 自动下载)

_FindGStreamer.cmake

老版本归档

_FindGStreamerMobile.cmake

老版本归档

2.5 cmake/presets/ —— 跨平台 preset(6  JSON)

文件

作用

common.json

所有平台共享的 preset 基础

Android.json

Android 平台 preset

iOS.json

iOS 平台 preset

Linux.json

Linux 平台 preset

Windows.json

Windows 平台 preset

macOS.json

macOS 平台 preset

Part 3:src/ —— 30 个子模块怎么分组看

3.0 30 个模块的功能全景图

        

3.1 应用骨架(3 个)

目录

干嘛的

核心文件

src/ 顶层

程序入口

main.cc(开始)、QGCApplication.cc(QApplication 子类)、RunGuard.cc(防重启)

API/

对外公开 API(主要给 fork 用)

QGCCorePlugin.h

Android/

Android 平台桥接

qtandroidserialport/ 等

3.2 通讯协议(2 个)

目录

干嘛的

Comms/

链路管理(Serial / TCP / UDP / Bluetooth / 模拟链路 MockLink / AirLink)

MAVLink/

MAVLink 协议层,含 LibEvents/ 子目录(MAVLink Events 协议)

3.3 飞行器抽象(5 个)

目录

干嘛的

Vehicle/

核心:Vehicle 类、多机管理。子目录 Actuators/ ComponentInformation/ FactGroups/ VehicleSetup/

FirmwarePlugin/

固件差异化:APM/ 和 PX4/ 两个 fork 实现

AutoPilotPlugins/

飞控配置 UI:APM/ / PX4/ / Common/

FactSystem/

参数/Fact 系统(QGC 的"参数总线")+ FactControls/ 子目录(QML 绑定控件)

Settings/

应用设置(基于 FactSystem)

3.4 任务规划(3 个)

目录

干嘛的

MissionManager/

航线/任务/Survey/GeoFence/Rally 全部模型层

PlanView/

Plan 视图(规划 UI)

Terrain/

地形高度查询

3.5 UI / 视觉(8 个)

目录

干嘛的

UI/

主窗口、AppSettings 弹窗、Toolbar

FlightDisplay/

Fly View(飞行视图)、Checklist、引导动作、虚拟摇杆

FlightMap/

飞行地图

QmlControls/

通用 QML 控件库(200+ 控件,全 fork 必看)

QtLocationPlugin/

自家瓦片地图插件(Bing / Google / AMap / OSM 等)

Viewer3D/

3D 视图(Qt3D 基础)

FirstRunPromptDialogs/

首次启动向导

FollowMe/

"跟随我"功能

3.6 视频 / 相机(3 个)

目录

干嘛的

VideoManager/

视频系统总入口 + VideoReceiver/ 子目录(含 GStreamer / QtMultimedia 两种后端)

Camera/

相机协议(Camera Protocol v2)

Gimbal/

云台协议(Gimbal Protocol v2)

3.7 外设 / 工具(4 个)

目录

干嘛的

Joystick/

手柄/游戏控制器(基于 SDL2)

GPS/

外接 GPS / RTK 基站

ADSB/

ADSB 飞行器追踪(SBS / USB SDR)

PositionManager/

地面站位置管理

3.8 杂项 / 工具(3 个)

目录

干嘛的

AnalyzeView/

Log 分析(GeoTagging / Log Download / MAVLink Console / Vibration / PX4 ULog)

UTMSP/

UTM Service Provider(无人机交通管理)

Utilities/

通用工具集:Audio/(TTS) / Compression/(zlib + xz) / Geo/(geographiclib) / Shape/(shapelib)

Part 4:test/ —— 16 个测试模块,跟 src/ 对应

4.1 test/ 目录构成

子目录 / 文件

作用

ADSB/

ADSB 模块测试

AnalyzeView/

Log 分析测试

AutoPilotPlugins/

飞控配置 UI 测试

Camera/

相机协议测试

Comms/

链路管理测试

FactSystem/

参数系统测试

FollowMe/

跟随功能测试

GPS/

GPS / RTK 测试

MAVLink/

MAVLink 协议测试

MissionManager/

任务规划测试

QmlControls/

QML 控件测试

Terrain/

地形测试

UI/

主 UI 测试

Utilities/

工具类测试

Vehicle/

Vehicle 抽象测试

qgcunittest/

测试框架本体

CMakeLists.txt

测试构建入口

UnitTest.qrc

测试资源

UnitTestList.cc / .h

测试用例注册表

4.2 测试是怎么编译/运行的

维度

行为

何时启用

QGC_BUILD_TESTING 由 CMAKE_BUILD_TYPE STREQUAL Debug 自动决定 —— Debug 默认 ON,Release 默认 OFF

编译产物

测试代码直接编进主可执行,没有单独 test runner

运行方式

QGroundControl --unittest XXX 跑某个 case

QML 测试

部分 test 目录(如 test/FactSystem/)用 qt_add_qml_module,方便测 QML 控件


Part 5:deploy/ —— 9 个平台子目录,打 installer 的素材库

子目录

作用

备注

android/

Android 签名 / keystore 模板

配 APK/AAB 签名时用

docker/

Docker 构建镜像

CI 起点

installer/

Qt IFW installer 资源(图标 / banner)

通用

ios/

iOS plist / 图标 / launch images

App Store 上架素材

linux/

Linux desktop 文件 / AppImage 资源

桌面集成

macos/

macOS Info.plist / entitlements / 图标

沙箱权限 + 签名

multipass/

Multipass VM 配置

 Mac 上交叉编 Linux 的虚拟机

vagrant/

Vagrant VM 配置

同上,另一个虚拟化路线

windows/

Windows NSIS 资源(图标 / banner / .rc)

安装器素材

multipass/ 和 vagrant/ 这两个有点特殊 —— 它们让你  macOS  Windows 上用虚拟机交叉编 Linux。不是日常路径,但 CI 和"想编 Linux AppImage 但只有 Mac 的开发者"会用到。

docker/ 提供了完整的 Linux 编译镜像,如果你想在 GitHub Actions / GitLab CI 跑构建,这个目录是起点。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐