mcpField
B
build-acceleration

build-acceleration

github.com/mohitmishra786開発269518 回インストール18 週間前に更新
リポジトリ

build-acceleration について

C/C++ 開発者とコーディングエージェント向けのビルド高速化スキルです。ボトルネックの診断、キャッシュ、分散コンパイル、コンパイル手法、インクルード整理、リンク時間の改善を扱います。

主な機能

  1. 01ビルドのボトルネック測定
  2. 02ccache と sccache の設定
  3. 03プリコンパイル済みヘッダーの利用
  4. 04Unity ビルドの有効化
  5. 05split-DWARF によるリンク時間短縮
  6. 06distcc と IWYU の利用

活用シーン

  1. 01変更のないファイルの再コンパイル時間削減
  2. 02大きく安定したヘッダーのコンパイル高速化
  3. 03複数マシンへのコンパイル分散
  4. 04デバッグ情報によるリンク負荷の軽減

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill build-acceleration

インストール後、Claude Code で/build-accelerationを入力して読み込まれたか確認します。

同梱ファイルreferences/ccache-config.md

詳細

ビルドの高速化

目的

キャッシュ(ccache/sccache)、分散コンパイル(distcc)、ユニティ/ジャンボビルド、プリコンパイル済みヘッダー、リンクを高速化する split-DWARF、IWYU によるインクルードの削減を活用して、C/C++ のビルド時間を短縮する方法をエージェントに案内します。

トリガー

  • 「C++ のビルドが遅すぎます。どうすれば高速化できますか?」
  • 「ccache/sccache はどう設定すればよいですか?」
  • 「CMake ではプリコンパイル済みヘッダーはどのように機能しますか?」
  • 「distcc で分散コンパイルを設定するにはどうすればよいですか?」
  • 「split-DWARF を使ってリンク時間を短縮するにはどうすればよいですか?」
  • 「コンパイルを遅くしているヘッダーを特定するにはどうすればよいですか?」

ワークフロー

1. まずボトルネックを診断する
# 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 — コンパイラキャッシュ
# 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 との連携(プレフィックスを使ったハックより推奨):

# 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()

~/.config/ccache/ccache.conf の主なオプション:

max_size = 20G
compression = true
compression_level = 6
# For CI: share cache across jobs
cache_dir = /shared/ccache
3. sccache — クラウド対応キャッシュ(Rust、C/C++)
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. プリコンパイル済みヘッダー(PCH)

PCH は大きなヘッダーを一度コンパイルし、そのバイナリ形式を再利用します。

# 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)
// 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 は、ヘッダーが大きく安定している場合(STL、Boost、Qt)に最も効果的です。頻繁に変更されるプロジェクトのヘッダーには PCH を使用しないでください。

5. ユニティ/ジャンボビルド

複数の .cpp ファイルを 1 つの TU にまとめることで、ヘッダーの解析にかかるオーバーヘッドを減らし、インライン化を改善します。

# 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)

手動で作成するユニティファイル:

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

注意点:匿名名前空間(各 TU に固有のものがあります)、ヘッダー内の using namespace、重複する静的変数。

6. split-DWARF — リンク時間を短縮する

split-DWARF はデバッグ情報を .dwo サイドカーファイルに分割し、リンカーが処理する量を大幅に減らします。

# 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

GDB の起動を高速化するには、--gdb-index と組み合わせます。

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

リンク時間の比較(一般的な大規模プロジェクト):完全な DWARF を使用する -g は、-gsplit-dwarf と比べてリンク時間が約 4~6 倍長くなります。

7. distcc — 分散コンパイル
# 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)

ccache と併用する場合:CC="ccache distcc gcc" — ccache がまずローカルキャッシュを確認し、見つからない場合は distcc にフォールバックします。

8. IWYU によるインクルードの削減
# 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

IWYU のワークフロー全体については、skills/build-systems/include-what-you-use を参照してください。

ccache の設定オプションについては、references/ccache-config.md を参照してください。

関連スキル

  • CMake プロジェクトの構成には、skills/build-systems/cmake を使用します
  • IWYU によるヘッダーの削減には、skills/build-systems/include-what-you-use を使用します
  • Rust 固有のビルド高速化には、skills/rust/rust-build-times を使用します
  • split-DWARF の内部仕様については、skills/debuggers/dwarf-debug-format を使用します

コメント