Ninja

Ninja представляет собой улучшенную и доработанную версию утилиты Make. Главная цель которой – автоматизация сборки и её ускорение, а также ускорение последующих пересборок, на основе сгенерированных утилитой файлов и решение типовых проблем при кроссплатформенной разработке.

Пример базового файла build.ninja:

cflags = -Wall

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

build hello.o: cc hello.c

Используемые понятия:

  • Узел (Node) – это просто файл. Входной (исходники), выходной (объектные файлы) – это все узлы или вершины графа.

  • Правило (Rule) – по сути это просто команда с шаблоном аргументов. Например, вызов gcc – правило, а его аргументы – $FLAGS $INCLUDES $DEFINES и еще какие-то общие аргументы.

  • Ребро (Edge) – соединяет несколько входных узлов и один выходной узлов, посредством Правила. Вся система сборки основана на том, что последовательно обходит граф, выполняя команды для ребер. Как только все ребра обработаны, проект собран.

  • Состояние (State) – это контейнер со всем вышеперечисленным, который система сборки и использует.

Last updated