# GCS 工程目录规范 Skill ## 触发条件 当用户要求: - "创建新工程" / "新建项目" / "初始化工程" - "按标准规范组织代码" / "工程目录规范" - "重构工程目录" / "整理工程结构" - "建立 GCS 项目" / "地面站工程模板" 时,按照本规范生成工程骨架。 ## 标准工程结构 ``` project-root/ ├── src/ │ ├── app/ # 主程序 + MainWindow + AppController │ ├── core/ # 核心业务(protocol/mission/parameter/vehicle) │ ├── comm/ # 通讯层(serial/udp/DataLink) │ ├── ui/ # UI 组件 │ │ ├── panels/ # 功能面板(cockpit/map/mission/setting/status) │ │ ├── widgets/ # 可复用控件(inputter/selector/scope) │ │ └── theme/ # 皮肤/字体 │ ├── plugins/ # 插件系统 + 内置工具插件 │ └── config/ # 配置管理 ├── tests/ │ ├── unit/ # 单元测试 │ ├── integration/ # 集成测试 │ └── fuzz/ # 模糊测试 ├── resources/ │ ├── icons/ │ ├── qrc/ │ ├── translations/ │ └── styles/ ├── docs/ │ ├── architecture.md │ ├── build.md │ └── PROJECT_LAYOUT.md # 本规范的详细文档 ├── scripts/ │ └── build_release.bat ├── third_party/ │ └── mavlink/ ├── .clang-format ├── .gitignore ├── CMakeLists.txt └── README.md ``` ## 命名约定 | 类型 | 规范 | 示例 | |------|------|------| | 目录 | `snake_case` | `remote_control/` | | 文件 | `PascalCase.ext` | `DataLink.h` | | 类名 | `PascalCase` | `MavLinkNode` | | 成员 | `m_camelCase` | `m_portName` | | 静态常量 | `kPascalCase` | `kDefaultBaud` | | 信号 | 过去式 | `dataReceived` | | 槽 | `onCamelCase` | `onDataReceived` | ## 模块依赖规则 - `ui` 依赖 `core`,`core` 不依赖 `ui` - `plugins` 依赖 `core` 接口,不直接依赖 `ui` - `comm` 与 `core` 通过接口解耦 - 禁止循环依赖 ## 构建要求 - CMake 3.16+,每模块独立 `CMakeLists.txt` - qmake `.pri` 兼容(渐进迁移) - C++17 标准 - `third_party/` 仅放头文件或无构建系统的库 ## 当前工程迁移映射 从现有 `gcs_nf` 工程迁移到标准结构时,使用以下映射: | 当前 | 标准 | |------|------| | `App/` | `src/app/` + `src/ui/panels/` + `src/ui/widgets/` + `src/plugins/` | | `MavLinkNode/` | `src/core/protocol/` | | `dlink/` | `src/comm/` | | `Cockpit/` | `src/ui/panels/cockpit/` | | `opmap/` | `src/ui/panels/map/` | | `Skin/` | `src/ui/theme/` | | `VehicleManage/` | `src/core/vehicle/` | | `mavlink/` | `third_party/mavlink/` | | `图标/` | `resources/icons/` | | `document/` | `docs/` | 详细规范见 `docs/PROJECT_LAYOUT.md`。