>> >> >> Reference << << << <<<<<<Ref>>>>>>
Ninja
Modified: 2025-12-31 | Author:ljf12825

Ninja是一个小巧、高效的构建系统,专注于快速执行构建规则
它不负责生成构建规则,而是执行已有规则,规则通常由CMake之类的工具生成,Ninja本身只关注如何根据描述的依赖关系来执行命令
Make是既要写规则,又要执行;Ninja是只管执行,生成规则交给别的工具\

Ninja的核心特点

使用

  1. 使用CMake生成Ninja构建文件 在配置CMake项目时,使用-G Ninja参数指定生成器未Ninja
# 在项目构建目录中
mkdir build && cd build
cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release

这条命令会读取上一级目录(..)的CMakeLists.txt,并根据其内容生成build.ninja文件和各种.ninja片段,而不是Makefile

  1. 使用Ninja进行构建 在上一步的build目录中,直接运行ninja命令
ninja

Ninja会读取build.ninja文件,开始编译项目。会看到它的输出非常简洁,直接显示正在进行的任务和进度,没有冗余信息

  1. 常用Ninja命令

Ninja构建文件

虽然不推荐手写,但了解其基本语法有助于调试。build.ninja文件主要由rule(规则),build statement(构建语句)和variable(变量)组成

# 定义一个名为'compile'的规则
rule compile
    command = gcc -c -o $out $in # 要执行的命令
    description = Compiling $out # 构建时显示的信息
    depfile = $out.d # 用于存储头文件等依赖信息
# 构建语句格式:build output_file: rule_name input_file
build hello.o: compile hello.c

这表示:要构建hello.o,需要使用compile这个规则,并且它依赖于hello.c文件

cflags = -Wall -O2
rule compile
    command = gcc $cflags -c -o $out $in
default hello
build all: phony hello.exe other_target

phony表示all不是一个真实的文件,它总是需要被构建

完整示例

cflags = -Wall

rule compile
  command = gcc $cflags -c -o $out $in

rule link
  command = gcc -o $out $in

build main.o: compile main.c
build utils.o: compile utils.c

build myapp: link main.o utils.o

default myapp