Ninja is a small, fast build system designed to have its input files generated by a higher-level build system (like CMake). It's optimized for speed and is particularly useful for large C++ projects.
# Create build directory
mkdir build && cd build
# Generate Ninja build files
cmake -G Ninja ..
# Or specify build type
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ..# Build everything
ninja
# Build specific target
ninja target_name
# Build with verbose output
ninja -v
# Build using multiple cores (default: all available)
ninja -j 8# Clean build artifacts
ninja clean
# List all available targets
ninja -t targets
# Show dependency graph
ninja -t graph | dot -Tpng -o deps.png
# Show build rules
ninja -t rules
# Dry run (show what would be built)
ninja -n# Initial setup
git clone your-cpp-project
cd your-cpp-project
mkdir build && cd build
# Configure with CMake
cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug ..
# Build
ninja
# Run tests (if available)
ninja test
# Install (if configured)
ninja install- Speed: Parallelizes builds efficiently
- Simplicity: Minimal syntax, fast parsing
- Dependency tracking: Accurate incremental builds
- Cross-platform: Works on Linux, macOS, Windows
- Always use a separate build directory
- Ninja files are generated - don't edit them manually
- Use
ninja -C build_dirto build from any directory - For debugging:
ninja -vshows full command lines