Meson Integration¶
rninja works seamlessly with Meson, which uses Ninja as its default backend.
Basic Usage¶
Setup and Build¶
Specify rninja Explicitly¶
# Tell Meson to use rninja
meson setup build --backend=ninja
# Meson looks for 'ninja' in PATH - use symlink or alias
Or build directly:
Build Types¶
Debug Build (Default)¶
Release Build¶
Other Build Types¶
# Plain (no optimization, no debug info)
meson setup build --buildtype=plain
# Debug optimized
meson setup build --buildtype=debugoptimized
# Minimum size
meson setup build --buildtype=minsize
Common Workflows¶
Standard Development¶
# First time setup
meson setup build
rninja -C build
# After code changes
rninja -C build
# After meson.build changes
meson setup build --reconfigure # or just re-run setup
rninja -C build
Clean Build¶
# Clean outputs
rninja -C build -t clean
# Full reconfigure
rm -rf build
meson setup build
rninja -C build
Running Tests¶
Installing¶
Using rninja as Default¶
Symlink Method¶
# Replace ninja with rninja
sudo ln -sf $(which rninja) /usr/local/bin/ninja
# Now Meson automatically uses rninja
meson setup build
meson compile -C build # Uses rninja
Alias Method¶
Direct Invocation¶
Skip meson compile and call rninja directly:
Advanced Usage¶
Parallel Builds¶
Specific Targets¶
# Build specific target
rninja -C build my_library
# Build executable only
rninja -C build my_program
Verbose Output¶
Cross-Compilation¶
Subprojects¶
Meson subprojects work normally:
Build specific subproject target:
IDE Integration¶
VS Code¶
.vscode/settings.json:
Build task (.vscode/tasks.json):
{
"version": "2.0.0",
"tasks": [
{
"label": "Build with rninja",
"type": "shell",
"command": "rninja -C build",
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
GNOME Builder¶
GNOME Builder auto-detects Meson projects and uses the configured ninja. Create symlink to use rninja:
Compilation Database¶
Meson generates compile_commands.json automatically:
meson setup build
# compile_commands.json is in build/
# Symlink to project root
ln -sf build/compile_commands.json .
Or use rninja:
Troubleshooting¶
Meson Uses Original Ninja¶
Ensure rninja is found first:
# Check which ninja is used
which ninja
# If it's not rninja, update PATH or create symlink
export PATH="$HOME/.cargo/bin:$PATH"
# Or
sudo ln -sf $(which rninja) /usr/local/bin/ninja
Build Fails After Meson Update¶
Subproject Issues¶
# Ensure subprojects are up to date
meson subprojects update
meson setup build --reconfigure
rninja -C build
Tips¶
Use meson compile for Portability¶
For scripts that need to work without rninja:
For maximum performance, call rninja directly:
Monitor Cache Performance¶
After builds: