mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-30 21:53:28 +08:00
174 lines
4.0 KiB
Markdown
174 lines
4.0 KiB
Markdown
---
|
||
description: 逐步修复C++构建错误、CMake问题和链接器问题。调用cpp-build-resolver代理进行最小化、精准的修复。
|
||
---
|
||
|
||
# C++ 构建与修复
|
||
|
||
此命令调用 **cpp-build-resolver** 代理,以最小的更改逐步修复 C++ 构建错误。
|
||
|
||
## 此命令的作用
|
||
|
||
1. **运行诊断**:执行 `cmake --build`、`clang-tidy`、`cppcheck`
|
||
2. **解析错误**:按文件分组并按严重性排序
|
||
3. **逐步修复**:一次修复一个错误
|
||
4. **验证每个修复**:每次更改后重新运行构建
|
||
5. **报告摘要**:显示已修复的内容和剩余的问题
|
||
|
||
## 何时使用
|
||
|
||
在以下情况下使用 `/cpp-build`:
|
||
|
||
* `cmake --build build` 因错误而失败时
|
||
* 链接器错误(未定义的引用,多重定义)
|
||
* 模板实例化失败
|
||
* 包含/依赖项问题
|
||
* 拉取更改后导致构建失败时
|
||
|
||
## 运行的诊断命令
|
||
|
||
```bash
|
||
# CMake configure
|
||
cmake -B build -S .
|
||
|
||
# Build
|
||
cmake --build build 2>&1 | head -100
|
||
|
||
# Static analysis (if available)
|
||
clang-tidy src/*.cpp -- -std=c++17
|
||
cppcheck --enable=all src/
|
||
```
|
||
|
||
## 示例会话
|
||
|
||
````text
|
||
# C++ 构建问题解决
|
||
|
||
## 初始诊断
|
||
|
||
```bash
|
||
$ cmake --build build
|
||
src/service/user.cpp:25:15: error: use of undeclared identifier 'UserRepository'
|
||
src/handler/api.cpp:42:9: error: no matching function for call to 'process'
|
||
src/handler/api.cpp:58:1: error: non-void function does not return a value
|
||
|
||
````
|
||
|
||
发现的错误:3
|
||
|
||
## 修复 1:未声明的标识符
|
||
|
||
文件:src/service/user.cpp:25
|
||
错误:使用了未声明的标识符 'UserRepository'
|
||
原因:缺少包含
|
||
|
||
```cpp
|
||
// Added include
|
||
#include "repository/user_repository.hpp"
|
||
```
|
||
|
||
```bash
|
||
$ cmake --build build
|
||
# 2 errors remaining
|
||
```
|
||
|
||
## 修复 2:无匹配函数
|
||
|
||
文件:src/handler/api.cpp:42
|
||
错误:没有匹配的函数用于调用 'process'
|
||
|
||
```cpp
|
||
// Changed
|
||
process(params.get("count"));
|
||
// To
|
||
process(std::stoi(params.get("count")));
|
||
```
|
||
|
||
```bash
|
||
$ cmake --build build
|
||
# 1 error remaining
|
||
```
|
||
|
||
## 修复 3:缺少返回
|
||
|
||
文件:src/handler/api.cpp:58
|
||
错误:非 void 函数未返回值
|
||
|
||
```cpp
|
||
std::optional<User> getUser(const std::string& id) {
|
||
if (id.empty()) {
|
||
return std::nullopt;
|
||
}
|
||
auto user = findUser(id);
|
||
// Added missing return
|
||
return user;
|
||
}
|
||
```
|
||
|
||
```bash
|
||
$ cmake --build build
|
||
# Build successful!
|
||
```
|
||
|
||
## 最终验证
|
||
|
||
```bash
|
||
$ ctest --test-dir build --output-on-failure
|
||
Test project build
|
||
1/5 Test #1: unit_tests ........ Passed 0.02 sec
|
||
2/5 Test #2: integration_tests Passed 0.15 sec
|
||
All tests passed.
|
||
```
|
||
|
||
## 摘要
|
||
|
||
| 指标 | 数量 |
|
||
|--------|-------|
|
||
| 已修复的构建错误 | 3 |
|
||
| 已修复的链接器错误 | 0 |
|
||
| 已修改的文件 | 2 |
|
||
| 剩余问题 | 0 |
|
||
|
||
构建状态:✅ 成功
|
||
|
||
```
|
||
## 常见错误修复
|
||
|
||
| 错误 | 典型修复方法 |
|
||
|-------|-------------|
|
||
| `undeclared identifier` | 添加 `#include` 或修正拼写错误 |
|
||
| `no matching function` | 修正参数类型或添加重载函数 |
|
||
| `undefined reference` | 链接库或添加实现 |
|
||
| `multiple definition` | 使用 `inline` 或移至 .cpp 文件 |
|
||
| `incomplete type` | 将前向声明替换为 `#include` |
|
||
| `no member named X` | 修正成员名称或包含头文件 |
|
||
| `cannot convert X to Y` | 添加适当的类型转换 |
|
||
| `CMake Error` | 修正 CMakeLists.txt 配置 |
|
||
|
||
## 修复策略
|
||
|
||
1. **优先处理编译错误** - 代码必须能够编译
|
||
2. **其次处理链接器错误** - 解决未定义引用
|
||
3. **第三处理警告** - 使用 `-Wall -Wextra` 进行修复
|
||
4. **一次只修复一个问题** - 验证每个更改
|
||
5. **最小化改动** - 仅修复问题,不重构代码
|
||
|
||
## 停止条件
|
||
|
||
在以下情况下,代理将停止并报告:
|
||
- 同一错误经过 3 次尝试后仍然存在
|
||
- 修复引入了更多错误
|
||
- 需要架构性更改
|
||
- 缺少外部依赖项
|
||
|
||
## 相关命令
|
||
|
||
- `/cpp-test` - 构建成功后运行测试
|
||
- `/cpp-review` - 审查代码质量
|
||
- `/verify` - 完整验证循环
|
||
|
||
## 相关
|
||
|
||
- 代理: `agents/cpp-build-resolver.md`
|
||
- 技能: `skills/cpp-coding-standards/`
|
||
```
|