Ninja
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.
- Skill ID
- mohitmishra786/low-level-dev-skills/ninja
- Publisher
- mohitmishra786
- Repository
- low-level-dev-skills
- Installs
- 0
- Files
- 2
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
mohitmishra786/low-level-dev-skills/ninjaInstalls these files- SKILL.md
- references/cheatsheet.md
What this skill tells the agent
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.ninjafile?"
Workflow
1. Ninja as a CMake generator
The most common use of Ninja is as the build executor for CMake:
# Configure with Ninja
cmake -S . -B build -G Ninja
cmake --build build # uses ninja internally
# Or invoke ninja directly
cd build && ninja
# Specify parallelism
ninja -j4
ninja -j$(nproc)
# Build specific target
ninja myapp
ninja installCMake also supports Ninja Multi-Config:
cmake -S . -B build -G "Ninja Multi-Config"
cmake --build build --config Release
cmake --build build --config Debug2. Verbose output and diagnostics
# Show full commands (not just [CC] foo.c)
ninja -v
# Dry run (show what would be built)
ninja -n
# Show why a target needs rebuilding
ninja -d explain myapp
# Print all targets
ninja -t targets all
# Print targets grouped by rule
ninja -t targets rule cc
# Dependency graph (graphviz)
ninja -t graph myapp | dot -Tsvg -o deps.svg3. Common Ninja flags
| Flag | Effect |
|---|---|
-j N | Parallel jobs (default: CPUs + 2) |
-l N | Don't start new jobs if load average > N |
-k N | Keep going after N failures (default 1) |
-v | Verbose: show full command lines |
-n | Dry run |
-C dir | Change to dir before doing anything |
-t tool | Run a sub-tool (clean, query, targets, graph, compdb) |
4. Cleaning
ninja -t clean # remove build outputs
ninja -t clean -g # also remove generated filesOr via CMake:
cmake --build build --target clean5. compile_commands.json
Ninja (via CMake) can generate a compile_commands.json for IDE integration and clang-tidy:
cmake -S . -B build -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
ln -sf build/compile_commands.json .6. build.ninja format (reference)
Rarely hand-written, but useful to understand for debugging:
# Variable
cflags = -Wall -O2
# Rule
rule cc
command = gcc $cflags -c $in -o $out
description = CC $in
# Build edge
build foo.o: cc foo.c
# Phony target
build all: phony foo.o
# Default target
default allKey concepts:
rule: defines how to produce outputs from inputsbuild: instantiates a rule with specific files$in/$out: automatic variables for inputs/outputsphony: a target that is always considered out of date (like.PHONYin make)
7. Ninja sub-tools
# List all build targets
ninja -t targets
# Query dependencies of a target
ninja -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 rules
ninja -t rules8. Common issues
| Issue | Cause | Fix |
|---|---|---|
ninja: error: 'foo.o', needed by 'prog', missing and no known rule to make it | Missing build rule | Regenerate with CMake; check add_executable source list |
| Build not picking up changes | Stale build.ninja | Re-run cmake -S . -B build |
| Very slow parallel build | -j too high for I/O-bound build | Use -l$(nproc) to limit by load |
| Circular dependency | Rule depends on itself | Check CMake target dependencies |
For the full Ninja command reference, build.ninja format details, and CMake integration patterns, see references/cheatsheet.md.
Related skills
- Use
skills/build-systems/cmakefor CMake configuration that generates Ninja files - Use
skills/build-systems/makefor Make-based projects
More from mohitmishra786
Use this skill in a project
Open any RiverX project, search the Skills panel for mohitmishra786/low-level-dev-skills/ninja, and install it in one click.
