How to use the command 'ninja' (with examples)
Ninja is a build system designed to be fast. It is commonly used for building software projects and executing build tasks in parallel. This article will illustrate several use cases of the ’ninja’ command along with their corresponding code examples, motivations, explanations, and example outputs.
Use case 1: Build in the current directory
Code:
ninja
Motivation:
Building in the current directory is the most basic use case of the ’ninja’ command. When no additional options are specified, ’ninja’ will search for a build file named “build.ninja” in the current directory and execute the build.
Explanation:
This command simply executes the ’ninja’ build system in the current directory. It uses the default “build.ninja” file to perform the build tasks.
Example output:
[1/5] Compiling main.cpp
[2/5] Compiling utils.cpp
[3/5] Compiling logger.cpp
[4/5] Linking myprogram
[5/5] Generating documentation
Build finished successfully.
Use case 2: Build in the current directory, executing 4 jobs at a time in parallel
Code:
ninja -j 4
Motivation:
When building large projects, it may be beneficial to execute multiple build tasks simultaneously to reduce build time. By specifying a higher number for the ‘-j’ option, the ’ninja’ command will parallelize the build execution.
Explanation:
The ‘-j’ option sets the maximum number of build tasks that can be executed in parallel at any given time. In this example, the value is set to 4, allowing up to 4 build tasks to be executed concurrently.
Example output:
[1/5] Compiling main.cpp
[2/5] Compiling utils.cpp
[3/5] Compiling logger.cpp
[4/5] Linking myprogram
[2/5] Compiling network.cpp
[1/5] Compiling database.cpp
[3/5] Compiling encryption.cpp
[2/5] Compiling threadpool.cpp
...
Use case 3: Build a program in a given directory
Code:
ninja -C path/to/directory
Motivation:
Sometimes, the build files for a program are located in a separate directory instead of the current one. In such cases, it is necessary to specify the path to the directory containing the build files.
Explanation:
The ‘-C’ option is used to specify a path to the directory where the build files are located. ’ninja’ will then look for the “build.ninja” file in the specified directory and execute the build tasks accordingly.
Example output:
[1/3] Compiling main.cpp
[2/3] Compiling utils.cpp
[3/3] Linking myprogram
Build finished successfully.
Use case 4: Show targets (e.g. ‘install’ and ‘uninstall’)
Code:
ninja -t targets
Motivation:
Sometimes, it is necessary to know the available targets in a build system, especially when there are specific tasks like installation or uninstallation.
Explanation:
By using the ‘-t’ option with the value ’targets’, the ’ninja’ command will display a list of targets defined in the build system, such as ‘install’, ‘uninstall’, or any other custom targets.
Example output:
install
uninstall
clean
test
Use case 5: Show help
Code:
ninja -h
Motivation:
When you need a quick reference or help regarding the usage of the ’ninja’ command, the ‘-h’ option can provide a brief overview of the available options and their descriptions.
Explanation:
The ‘-h’ option displays a help message that summarizes the command-line options and their usage for the ’ninja’ command.
Example output:
Usage: ninja [options] [targets...]
...
Options:
-C dir Change to dir before doing anything else.
-j N Run N jobs in parallel.
-t targets Display a list of targets.
-h Show this help message and exit.
...
Conclusion:
The ’ninja’ command is a powerful build system that speeds up the build process by executing build tasks in parallel. It offers various options to customize the build execution and provides useful features like target listing and help messages. By understanding the different use cases and their corresponding command examples, you can efficiently utilize the ’ninja’ command for building your software projects.