К основному содержанию
скилл CX Codex

build-acceleration — скилл для Claude Code: ускоряет сборку C/C++

Скилл для ИИ-агентов, который помогает разобраться, почему сборка C/C++ идёт медленно, и настроить кэш, распределённую компиляцию и PCH.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add mohitmishra786/low-level-dev-skills --skill build-acceleration -a claude-code
Открыть на GitHub

Что делает build-acceleration

Скилл ведёт агента по шагам: сначала диагностика узкого места, потом конкретные инструменты. Для диагностики предлагается замерить полную сборку через time cmake --build build -j$(nproc), собрать отчёт по времени компиляции флагами -ftime-report и посмотреть тайминги в Ninja. Дальше — по ситуации.

Внутри разобраны ccache и sccache, прекомпилированные заголовки через target_precompile_headers, unity-сборки с UNITY_BUILD, split-DWARF для ускорения линковки и распределённая компиляция через distcc. Отдельный раздел — прореживание заголовков с IWYU. Для ccache и sccache даны примеры конфигурации, включая общий кэш для CI и бэкенд S3 у sccache.

Есть места, где легко ошибиться. Unity-сборка ломается на анонимных пространствах имён и дублирующихся статических переменных, поэтому проблемные файлы исключают через SKIP_UNITY_BUILD_INCLUSION. Прекомпилированные заголовки стоит применять к большим и стабильным заголовкам вроде STL, Boost или Qt, а не к проектным файлам, которые часто меняются. Для distcc нужны установленный демон на рабочих машинах и список хостов в DISTCC_HOSTS.

Какие задачи решает

  • понять, какой файл тормозит сборку
  • настроить ccache и проверить процент попаданий
  • собрать кэш sccache с бэкендом S3
  • подключить прекомпилированные заголовки в CMake
  • сократить время линковки через split-DWARF

Примеры запросов агенту

  • Моя сборка на C++ слишком долгая, помоги найти узкое место
  • Настрой ccache для этого CMake-проекта
  • Как подключить unity-сборку и не сломать ODR?

Как установить build-acceleration

1Через Skills CLI (Vercel)

npx skills add mohitmishra786/low-level-dev-skills --skill build-acceleration -a claude-code

2Вручную: положить файлы

~/.claude/skills/build-acceleration/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/build-acceleration/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о build-acceleration

Как установить build-acceleration в Claude?

Выполните npx skills add mohitmishra786/low-level-dev-skills --skill build-acceleration -a claude-code. Скилл появится по пути ~/.claude/skills/build-acceleration/SKILL.md.

Что делает build-acceleration?

Проводит агента по диагностике медленной сборки C/C++ и настройке инструментов ускорения: ccache, sccache, distcc, unity-сборок, прекомпилированных заголовков, split-DWARF и IWYU.

С какими платформами работает скилл?

Кроме Claude есть установка для Codex, Cursor, GitHub Copilot, Gemini CLI и OpenCode.

Исходный текст

SKILL.md · MIT
---
name: build-acceleration
description: Build acceleration skill for C/C++ projects. Use when reducing compilation times with ccache, sccache, distcc, unity builds, precompiled headers, split DWARF, or IWYU. Covers caching strategies, distributed compilation, link time reduction, and diagnosing build bottlenecks. Activates on queries about slow builds, ccache, sccache, precompiled headers, unity builds, split-DWARF, or reducing C++ compile times.
---

# Build Acceleration

## Purpose

Guide agents through reducing C/C++ build times using caching (ccache/sccache), distributed compilation (distcc), unity/jumbo builds, precompiled headers, split-DWARF for faster linking, and include pruning with IWYU.

## Triggers

- "My C++ build is too slow — how do I speed it up?"
- "How do I set up ccache / sccache?"
- "How do precompiled headers work with CMake?"
- "How do I set up distributed compilation with distcc?"
- "How do I reduce link times with split-DWARF?"
- "How do I find which headers are slowing down compilation?"

## Workflow

### 1. Diagnose the bottleneck first

```bash
# Time the full build
time cmake --build build -j$(nproc)

# Find the slowest TUs (CMake ≥3.16 with --profiling-output)
cmake -S . -B build -DCMAKE_CXX_FLAGS="-ftime-report"
cmake --build build 2>&1 | grep "Total" | sort -t: -k2 -rn | head -20

# Ninja build timings (use ninja -j1 for serial timing)
ninja -C build -j1 2>&1 | grep "^\[" | sort -t" " -k2 -rn | head -20
```

### 2. ccache — compiler cache

```bash
# Install
apt-get install ccache   # Ubuntu/Debian
brew install ccache      # macOS

# Check hit rate
ccache -s

# Configure cache size (default 5GB)
ccache -M 20G

# Invalidate cache if needed
ccache -C
```

CMake integration (recommended over prefix hacks):

```cmake
# CMakeLists.txt
find_program(CCACHE_PROGRAM ccache)
if(CCACHE_PROGRAM)
    set(CMAKE_C_COMPILER_LAUNCHER   ${CCACHE_PROGRAM})
    set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_PROGRAM})
endif()
```

Key `~/.config/ccache/ccache.conf` options:

```ini
max_size = 20G
compression = true
compression_level = 6
# For CI: share cache across jobs
cache_dir = /shared/ccache
```

### 3. sccache — cloud-compatible cache (Rust, C/C++)

```bash
cargo install sccache
# Or: brew install sccache

# Set as compiler launcher
export RUSTC_WRAPPER=sccache          # for Rust
export CMAKE_C_COMPILER_LAUNCHER=sccache    # for CMake

# With S3 backend
export SCCACHE_BUCKET=my-build-cache
export SCCACHE_REGION=us-east-1
sccache --start-server

sccache --show-stats
```

### 4. Precompiled headers (PCH)

PCH compiles a large header once and reuses the binary form.

```cmake
# CMake ≥3.16 native PCH support
target_precompile_headers(mylib PRIVATE
    <vector>
    <string>
    <unordered_map>
    "myproject/common.h"
)

# Share PCH across targets (avoids recompilation)
target_precompile_headers(myapp REUSE_FROM mylib)
```

```c
// Traditional: stdafx.h / pch.h approach
// All TUs include pch.h as the very first include
// pch.h includes heavy system headers
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
```

PCH is most effective when headers are large and stable (STL, Boost, Qt). Avoid PCH for frequently-changing project headers.

### 5. Unity / jumbo builds

Combine multiple `.cpp` files into one TU to reduce header parsing overhead and improve inlining.

```cmake
# CMake ≥3.16 unity build
set_target_properties(mylib PROPERTIES UNITY_BUILD ON)
# Control batch size (default 8 files per unity TU)
set_target_properties(mylib PROPERTIES UNITY_BUILD_BATCH_SIZE 16)

# Exclude specific files from unity (e.g., if they have ODR issues)
set_source_files_properties(problem.cpp PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
```

Manual unity file:

```cpp
// unity_build.cpp
#include "module_a.cpp"
#include "module_b.cpp"
#include "module_c.cpp"
```

Watch out for: anonymous namespaces (each TU has its own), `using namespace` in headers, duplicate static variables.

### 6. split-DWARF — reduce link time

Split DWARF puts debug info in `.dwo` sidecar files, dramatically reducing what the linker must process.

```bash
# GCC / Clang
gcc -g -gsplit-dwarf -o prog main.c

# CMake global
add_compile_options(-gsplit-dwarf)

# Combine .dwo files for distribution (optional)
dwp -o prog.dwp prog  # GNU dwp tool
```

Pair with `--gdb-index` for faster GDB startup:

```bash
gcc -g -gsplit-dwarf -Wl,--gdb-index -o prog main.c
```

Link time comparison (large project, typical): `-g` full DWARF ~4×–6× longer link vs `-gsplit-dwarf`.

### 7. distcc — distributed compilation

```bash
# Install on all machines
apt-get install distcc

# Start daemon on worker machines
distccd --daemon --allow 192.168.1.0/24 --jobs 8

# Client: set DISTCC_HOSTS
export DISTCC_HOSTS="localhost/4 worker1/8 worker2/8"
make -j20 CC="distcc gcc"

# CMake integration
set(CMAKE_C_COMPILER_LAUNCHER distcc)
set(CMAKE_CXX_COMPILER_LAUNCHER distcc)
```

Stack with ccache: `CC="ccache distcc gcc"` — ccache checks local cache first, falls back to distcc.

### 8. Include pruning with IWYU

```bash
# Install
apt-get install iwyu

# Run via CMake
cmake -S . -B build -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE=iwyu
cmake --build build 2>&1 | tee iwyu.log

# Apply fixes automatically
fix_include < iwyu.log --nosafe_headers
```

See `skills/build-systems/include-what-you-use` for full IWYU workflow.

For ccache configuration options, see [references/ccache-config.md](references/ccache-config.md).

## Related skills

- Use `skills/build-systems/cmake` for CMake project structure
- Use `skills/build-systems/include-what-you-use` for IWYU header pruning
- Use `skills/rust/rust-build-times` for Rust-specific build acceleration
- Use `skills/debuggers/dwarf-debug-format` for split-DWARF internals

© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills

Похожие скиллы

Все скиллы по теме «Языки программирования» →
qt-cmake-project qt-ai-skills Скилл собирает и правит CMake для проектов на Qt 6: цели, QML-модули, ресурсы. Пригодится, когда агент путает команды Qt 5 и Qt 6. CX Codex +1 530установок cmake-vcpkg официальный github Правило задаёт Copilot контекст проекта на C++: vcpkg в режиме манифеста, настройки через CMakePresets.json и сборка под MSVC, Clang и GCC. ★ 40 418звёзд репо bazel-build-optimization Seth Hobson Скилл помогает настраивать Bazel для монорепозиториев, удалённого выполнения и кэширования. Подойдёт для разбора проблем сборки и ускорения пайплайна. CX Codex 10 300установок cpp-pro https://github.com/Jeffallan Пишет, оптимизирует и отлаживает C++ с concepts, ranges, корутинами, SIMD и шаблонной метапрограммированием. Пригодится для проектов на C++20/23, где нужна производительность и чёткая типизация. CX Codex +1 5 300установок cpp-testing affaan-m Скилл ведёт агента по циклу red-green-refactor в тестах на C++17/20 и настраивает GoogleTest с CMake/CTest. Пригодится, когда тесты падают или ведут себя нестабильно. CX Codex +1 4 700установок vcpkg официальный github Помогает настроить vcpkg в C++-проекте, закрепить версии библиотек и собрать проект для разных платформ. Пригодится при настройке манифеста или переходе с классического режима. 26установок

Из того же набора62

linker-scripts Помогает писать и править скрипты компоновщика GNU ld для bare-metal: регионы памяти, VMA и LMA, инициализация .bss и .data. CX Codex +1 523установок wasm-emscripten Скилл ведёт агента через сборку C и C++ в WebAssembly: подбор флагов emcc, экспорт функций, модель памяти, Asyncify и отладка .wasm. CX Codex +1 513установок zig-debugging Скилл для ИИ-агента: разбирает паники Zig, error return traces и сессии GDB/LLDB. Пригодится, когда программа падает, а стек нечитаемый. CX Codex +1 511установок zig-build-system Помогает агенту писать и отлаживать build.zig: исполняемые файлы, библиотеки, C-исходники, опции сборки и тесты. CX Codex +1 508установок zig-cinterop Скилл объясняет агенту, как связать Zig и C: @cImport, translate-c, extern struct, экспорт функций и сборка смешанных проектов. CX Codex +1 482установок include-what-you-use Скилл ведёт агента через IWYU: разбирает отчёты, применяет mapping-файлы и убирает лишние #include, из-за которых сборка C++ расползается. CX Codex +1 480установок rust-no-std Скилл для разработки на Rust без стандартной библиотеки: разбирает границу core, alloc и std, глобальные аллокаторы и обработчики паник. CX Codex +1 474установок dwarf-debug-format Скилл объясняет агенту, как читать отладочную информацию DWARF: секции ELF, split DWARF, debuginfod, влияние LTO и stripping. CX Codex +1 471установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой