Ninja

mohitmishra786/low-level-dev-skills/skills/build-systems/ninja

作者 mohitmishra786bdc58472fa9f無授權條款253 個星標收錄於 2026年10月9日更新於 2026年10月9日儲存庫3 個月前更新

Ninja build system skill. Use when diagnosing Ninja build failures, understanding Ninja's role as a low-level build executor generated by CMake or other meta-build systems, tuning parallelism, interpreting Ninja output, or working with build.ninja files. Activates on queries about ninja errors, ninja parallelism, ninja verbose output, build.ninja format, or ninja as a CMake generator.

AI 產生的概覽

引導代理使用 Ninja 建置執行器、診斷問題、調整平行度並理解 build.ninja 檔案。

功能
此技能提供將 Ninja 做為低階建置執行器使用的指引,通常由 CMake 產生。內容涵蓋以 CMake 的 Ninja 產生器設定建置、詳細輸出與試執行輸出、平行度參數、清理、產生 compile_commands.json,以及 build.ninja 檔案格式。它也列出常用的 Ninja 子工具,並以表格說明常見建置錯誤的原因與修正方式,同時指向速查參考以取得更完整的命令細節。
適用情境
適用於診斷 Ninja 建置失敗、解讀 Ninja 輸出或調整 Ninja 平行度的情境。也適合關於將 Ninja 與 CMake 搭配使用、Ninja Multi-Config 產生器或 build.ninja 檔案格式的問題。
執行需求
不需要指令碼或套件,僅為說明性內容。所述工作流程假定已安裝 Ninja 和 CMake,部分命令可選用 graphviz(dot)或 clang-tidy。

Ninja

Purpose

Guide agents through Ninja as a build executor: diagnosing failures, controlling parallelism, generating from CMake, and understanding the .ninja file format when needed.

Triggers

  • "Ninja is failing — how do I get more output?"
  • "How do I use Ninja with CMake?"
  • "How many parallel jobs does Ninja use?"
  • "How do I add a custom build step in Ninja?"
  • "What is a build.ninja file?"

Workflow

1. Ninja as a CMake generator

The most common use of Ninja is as the build executor for CMake:

bash
# Configure with Ninjacmake -S . -B build -G Ninjacmake --build build                    # uses ninja internally
# Or invoke ninja directlycd build && ninja
# Specify parallelismninja -j4ninja -j$(nproc)
# Build specific targetninja myappninja install

CMake also supports Ninja Multi-Config:

bash
cmake -S . -B build -G "Ninja Multi-Config"cmake --build build --config Releasecmake --build build --config Debug

2. Verbose output and diagnostics

bash
# Show full commands (not just [CC] foo.c)ninja -v
# Dry run (show what would be built)ninja -n
# Show why a target needs rebuildingninja -d explain myapp
# Print all targetsninja -t targets all
# Print targets grouped by ruleninja -t targets rule cc
# Dependency graph (graphviz)ninja -t graph myapp | dot -Tsvg -o deps.svg

3. Common Ninja flags

FlagEffect
-j NParallel jobs (default: CPUs + 2)
-l NDon't start new jobs if load average > N
-k NKeep going after N failures (default 1)
-vVerbose: show full command lines
-nDry run
-C dirChange to dir before doing anything
-t toolRun a sub-tool (clean, query, targets, graph, compdb)

4. Cleaning

bash
ninja -t clean          # remove build outputsninja -t clean -g       # also remove generated files

Or via CMake:

bash
cmake --build build --target clean

5. compile_commands.json

Ninja (via CMake) can generate a compile_commands.json for IDE integration and clang-tidy:

bash
cmake -S . -B build -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ONln -sf build/compile_commands.json .

6. build.ninja format (reference)

Rarely hand-written, but useful to understand for debugging:

ninja
# Variablecflags = -Wall -O2
# Rulerule cc  command = gcc $cflags -c $in -o $out  description = CC $in
# Build edgebuild foo.o: cc foo.c
# Phony targetbuild all: phony foo.o
# Default targetdefault all

Key concepts:

  • rule: defines how to produce outputs from inputs
  • build: instantiates a rule with specific files
  • $in / $out: automatic variables for inputs/outputs
  • phony: a target that is always considered out of date (like .PHONY in make)

7. Ninja sub-tools

bash
# List all build targetsninja -t targets
# Query dependencies of a targetninja -t query myapp
# Clean (already mentioned)ninja -t clean
# Generate compile_commands.json (if supported by generator)ninja -t compdb cc cxx > compile_commands.json
# List rulesninja -t rules

8. Common issues

IssueCauseFix
ninja: error: 'foo.o', needed by 'prog', missing and no known rule to make itMissing build ruleRegenerate with CMake; check add_executable source list
Build not picking up changesStale build.ninjaRe-run cmake -S . -B build
Very slow parallel build-j too high for I/O-bound buildUse -l$(nproc) to limit by load
Circular dependencyRule depends on itselfCheck CMake target dependencies

For the full Ninja command reference, build.ninja format details, and CMake integration patterns, see references/cheatsheet.md [blocked].

Related skills

  • Use skills/build-systems/cmake for CMake configuration that generates Ninja files
  • Use skills/build-systems/make for Make-based projects

來源與署名

來源:mohitmishra786/low-level-dev-skills位於skills/build-systems/ninja提交bdc5847

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架