94 lines
3.0 KiB
Markdown
94 lines
3.0 KiB
Markdown
|
|
# 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`。
|