CMake Integration¶
rninja works seamlessly with CMake-generated Ninja build files.
Basic Usage¶
Generate Build Files¶
Specify rninja Explicitly¶
# Tell CMake to use rninja
cmake -G Ninja -DCMAKE_MAKE_PROGRAM=$(which rninja) -B build
# Build
cmake --build build
# or
rninja -C build
Build Types¶
Debug Build¶
Release Build¶
Multiple Build Types¶
# Create both configurations
cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -B build/debug
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -B build/release
# Build both (in parallel)
rninja -C build/debug &
rninja -C build/release &
wait
Common Workflows¶
Standard Development¶
# First time setup
cmake -G Ninja -B build
rninja -C build
# After code changes
rninja -C build
# After CMakeLists.txt changes
cmake -B build # Regenerate
rninja -C build
Clean Build¶
# Clean outputs (preserves cache)
rninja -C build -t clean
# Full clean (remove build directory)
rm -rf build
cmake -G Ninja -B build
rninja -C build
Generate compilation database¶
# Method 1: CMake export
cmake -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -B build
ln -sf build/compile_commands.json .
# Method 2: rninja compdb
rninja -C build -t compdb > compile_commands.json
Using rninja as Default¶
CMake Preset¶
Create CMakePresets.json:
{
"version": 3,
"configurePresets": [
{
"name": "ninja-rninja",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_MAKE_PROGRAM": "rninja"
}
}
]
}
Usage:
Environment Variable¶
Then CMake automatically uses rninja:
Symlink¶
Replace ninja with rninja system-wide:
Advanced Usage¶
Parallel Builds¶
Verbose Output¶
Specific Targets¶
# Build specific target
rninja -C build my_target
# Build multiple targets
rninja -C build target1 target2
# Build and run tests
rninja -C build && ctest --test-dir build
Cross-Compilation¶
IDE Integration¶
VS Code¶
.vscode/settings.json:
{
"cmake.generator": "Ninja",
"cmake.cmakePath": "cmake",
"cmake.buildDirectory": "${workspaceFolder}/build",
"cmake.configureSettings": {
"CMAKE_MAKE_PROGRAM": "rninja",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
}
CLion¶
- Settings > Build, Execution, Deployment > CMake
- Add CMake option:
-DCMAKE_MAKE_PROGRAM=rninja
Qt Creator¶
- Manage Kits > CMake Configuration
- Add:
CMAKE_MAKE_PROGRAM:FILEPATH=/path/to/rninja
Troubleshooting¶
CMake Doesn't Find rninja¶
# Specify full path
cmake -G Ninja -DCMAKE_MAKE_PROGRAM=/full/path/to/rninja -B build
# Or add to PATH
export PATH="$HOME/.cargo/bin:$PATH"
Regeneration Loop¶
If CMake keeps regenerating:
# Touch timestamp file
touch build/CMakeCache.txt
# Or reconfigure
rm -rf build/CMakeFiles
cmake -B build
Cache Not Working¶
Ensure rninja is actually being used:
Tips¶
Use CMake Presets¶
For reproducible builds:
{
"version": 3,
"configurePresets": [
{
"name": "dev",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_MAKE_PROGRAM": "rninja",
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
}
],
"buildPresets": [
{
"name": "dev",
"configurePreset": "dev"
}
]
}
Leverage Cache Statistics¶
After builds:
Multi-Config Generators¶
For Ninja Multi-Config: