ccgo 3.7.1

A high-performance C++ cross-platform build CLI
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
# 构建分析

## 概述

CCGO 提供**构建分析**功能,用于跟踪和分析构建性能随时间的变化。它有助于识别瓶颈、跟踪改进效果并优化构建配置。

## 优势

- 📊 **性能跟踪** —— 监控构建时间并识别趋势
- 🎯 **瓶颈识别** —— 找出最耗时的阶段
- 📈 **缓存有效性** —— 跟踪编译器缓存命中/未命中率
- 🔍 **构建历史** —— 查看历史构建并对比性能
- 📉 **优化洞察** —— 数据驱动的构建优化决策

## 快速开始

构建分析数据在构建过程中**自动收集**,并存储在本地的 `~/.ccgo/analytics/`。

### 查看分析数据

```bash
# 显示最近的构建(默认 10 条)
ccgo analytics show

# 显示更多构建
ccgo analytics show -n 20

# 显示汇总统计
ccgo analytics summary

# 列出所有有分析数据的项目
ccgo analytics list
```

## 命令

### `ccgo analytics show`

显示包含关键指标的最近构建历史:

```bash
$ ccgo analytics show

================================================================================
Build Analytics for myproject
================================================================================

Build #1 - linux (2026-01-21T15:30:00+08:00)
  Duration:    45.30s
  Jobs:        8
  Success:     ✓
  Cache Tool:  sccache
  Cache Rate:  78.5%

Build #2 - linux (2026-01-21T16:00:00+08:00)
  Duration:    12.50s
  Jobs:        8
  Success:     ✓
  Cache Tool:  sccache
  Cache Rate:  95.2%

Build #3 - macos (2026-01-21T16:15:00+08:00)
  Duration:    38.70s
  Jobs:        8
  Success:     ✓
  Cache Tool:  ccache
  Cache Rate:  82.3%
```

**选项**:
- `-n, --count <NUM>` —— 显示的构建数量(默认 10)

### `ccgo analytics summary`

显示所有构建的聚合统计信息:

```bash
$ ccgo analytics summary

================================================================================
Build Analytics Summary for myproject
================================================================================

Total Builds:      25
Successful:        24 (96.0%)

Build Duration:
  Average:         32.45s
  Fastest:         11.20s
  Slowest:         58.90s

Cache Statistics:
  Builds with cache: 23
  Avg Hit Rate:      85.3%

Platform Breakdown:
  linux............... 15
  macos............... 8
  ios................. 2

================================================================================
```

### `ccgo analytics clear`

清除当前项目的分析历史:

```bash
$ ccgo analytics clear

This will delete 25 build analytics entries for 'myproject'
Continue? [y/N] y
✓ Cleared analytics for 'myproject'
```

**选项**:
- `-y, --yes` —— 跳过确认提示

### `ccgo analytics export`

将分析数据导出到 JSON 文件:

```bash
$ ccgo analytics export -o builds.json

✓ Exported 25 build analytics to builds.json
```

**选项**:
- `-o, --output <FILE>` —— 输出文件路径

### `ccgo analytics list`

列出所有有分析数据的项目:

```bash
$ ccgo analytics list

================================================================================
Projects with Analytics
================================================================================

  myproject.................................... 25 builds
  another-lib.................................. 12 builds
  experimental................................. 5 builds

Use 'ccgo analytics show' from a project directory to view details.
================================================================================
```

## 收集的指标

### 构建概览

- **项目名称** —— 正在构建的项目
- **平台** —— 目标平台(linux、macos、windows 等)
- **时间戳** —— 构建开始时间(ISO 8601)
- **总时长** —— 完整构建耗时(秒)
- **并行 Job 数** —— 并行编译任务数
- **成功状态** —— 构建是否成功
- **错误/警告** —— 编译诊断计数

### 阶段分解

构建被划分为多个阶段,每个阶段单独计时:

1. **依赖解析** —— 安装并解析依赖
2. **CMake 配置** —— CMake configure 步骤
3. **编译** —— C/C++ 源文件编译
4. **链接** —— 链接库
5. **归档** —— 创建 ZIP 归档
6. **后处理** —— 额外的打包步骤

每个阶段会跟踪:
- 时长(秒)
- 占总构建时间的百分比

### 缓存统计

对于使用 ccache/sccache 的构建:

- **缓存工具** —— 正在使用的工具(ccache、sccache)
- **缓存命中** —— 从缓存重用的编译产物
- **缓存未命中** —— 新增到缓存的编译结果
- **命中率** —— 缓存命中百分比(0-100%)

### 文件统计

- **源文件** —— .c/.cc/.cpp 文件数量
- **头文件** —— .h/.hpp 文件数量
- **总行数** —— 代码总行数
- **产物大小** —— 最终输出大小(字节)

## 数据存储

分析数据存储在本地:

```
~/.ccgo/analytics/
├── myproject.json      # myproject 的分析数据
├── another-lib.json    # another-lib 的分析数据
└── ...
```

每个项目文件包含:
- 最近 100 次构建(更早的构建会被自动裁剪)
- JSON 格式,便于解析和导出
- 不包含任何可识别个人身份的信息

## 分析 API(Rust)

在 CCGO 内部以编程方式访问:

```rust
use ccgo::build::analytics::{BuildAnalytics, AnalyticsCollector, BuildPhase};

// 创建收集器
let mut collector = AnalyticsCollector::new(
    "myproject".to_string(),
    "linux".to_string(),
    8, // 并行 job 数
);

// 阶段计时
collector.start_phase(BuildPhase::Compilation);
// ... 编译工作 ...
collector.end_phase(BuildPhase::Compilation);

// 记录诊断
collector.add_diagnostics(2, 15); // 2 个错误,15 个警告

// 设置成功状态
collector.set_success(true);

// 完成并保存
let analytics = collector.finalize(cache_stats, file_stats);
analytics.save()?;

// 加载历史
let history = BuildAnalytics::load_history("myproject")?;

// 获取平均构建时间
let avg = BuildAnalytics::average_build_time("myproject")?;
```

## 使用场景

### 性能回归检测

```bash
# 改动后
ccgo build linux

# 检查构建是否变慢
ccgo analytics summary

# 期望:平均时长不应显著增加
```

### 缓存有效性

```bash
# 第一次构建(冷缓存)
ccgo build linux --cache sccache
# 记录耗时

# 第二次构建(热缓存)
ccgo build linux --cache sccache
# 应快 50-80%

# 检查缓存命中率
ccgo analytics show -n 1
# 期望:高缓存命中率(>80%)
```

### CI/CD 监控

```yaml
# .github/workflows/build.yml
- name: Build
  run: ccgo build linux

- name: Show Analytics
  run: ccgo analytics show -n 1

- name: Export Analytics
  run: ccgo analytics export -o build-stats.json

- name: Upload Analytics
  uses: actions/upload-artifact@v3
  with:
    name: build-analytics
    path: build-stats.json
```

### 跨平台对比

```bash
# 构建多个平台
ccgo build linux
ccgo build macos
ccgo build windows

# 查看汇总
ccgo analytics summary

# Platform Breakdown 部分展示相对性能
```

## 最佳实践

### DO

✅ **定期查看** —— 在重大变更后检查分析数据
✅ **跟踪趋势** —— 监控构建是否随时间变慢
✅ **优化热点路径** —— 聚焦占比最高的阶段
✅ **启用缓存** —— 编译器缓存可显著改善指标
✅ **导出报告** —— 使用 JSON 导出进行趋势分析

### DON'T

❌ **不要提交分析数据** —— 数据仅在本地机器
❌ **不要手动编辑** —— 分析文件由系统自动生成
❌ **不要依赖首次构建** —— 冷缓存构建总是更慢
❌ **不要跨机器对比** —— 硬件会影响计时

## 故障排除

### 没有分析数据

**症状**:`ccgo analytics show` 提示 "No build analytics available"

**解决**:分析收集是自动的,但需要:
```bash
# 先运行一次构建
ccgo build linux

# 然后查看分析数据
ccgo analytics show
```

### 分析数据未更新

**症状**:新构建未出现在分析数据中

**解决**:检查构建是否成功完成:
```bash
# 验证构建成功
ccgo build linux

# 查看最近的分析数据
ccgo analytics show -n 1
```

### 看到错误项目的分析数据

**症状**:看到的是其他项目的分析数据

**解决**:分析数据按 `CCGO.toml` 中的项目名称关联:
```bash
# 检查当前项目
grep "name =" CCGO.toml

# 确认在正确目录中
pwd
```

### 存储位置

分析数据存储在:
- **Linux**`~/.ccgo/analytics/`
- **macOS**`~/.ccgo/analytics/`
- **Windows**`%USERPROFILE%\.ccgo\analytics\`

## 未来增强

未来版本计划的功能:

- [ ] 实时构建进度可视化
- [ ] 内存使用跟踪
- [ ] 依赖编译分解
- [ ] 历史趋势图表
- [ ] 导出为 CSV/Excel
- [ ] 与构建仪表板集成
- [ ] 跨团队对比分析
- [ ] 自动回归告警

## 另请参阅

- [构建缓存]build-caching.zh.md —— 通过缓存改善构建时间
- [构建系统]features/build-system.zh.md —— 通用构建系统概览
- [增量构建]incremental-builds.md —— 更快的重建策略

## 更新日志

### v3.0.11 (2026-01-21)

- ✅ 实现构建分析系统
- ✅ 添加 `ccgo analytics` 命令及其 show/summary/clear/export/list 子命令
- ✅ 自动收集构建指标
- ✅ 阶段计时分解
- ✅ 缓存统计集成
- ✅ 文件与错误/警告跟踪
- ✅ 本地存储于 `~/.ccgo/analytics/`
- ✅ 每项目最多保留最近 100 次构建(自动裁剪)

---

*构建分析帮助你基于数据做出关于构建优化与配置的决策。*