ninja

Минималистичная система сборки, ориентированная на максимальную скорость выполнения. В отличие от высокоуровневых систем (CMake, Meson, Autotools), Ninja не предназначена для написания правил сборки вручную — она выступает в роли низкоуровневого бэкенда, который получает на вход готовый граф зависимостей и выполняет только необходимые команды с максимально возможной параллелизацией.

Особенности

  • экстремально высокая скорость инкрементальной и полной сборки;
  • простой декларативный формат файлов сборки (.ninja);
  • автоматическая параллелизация задач по доступным ядрам процессора;
  • минимальные накладные расходы при запуске и чтении правил;
  • интеграция с генераторами сборки (CMake, Meson, GN, Premake и др.).

Основные компоненты

Ninja состоит из одного исполняемого файла, который интерпретирует файлы описания сборки и выполняет команды. Вся мощь системы раскрывается через генерируемые файлы .ninja и вспомогательные утилиты (подробнее с документацией можно ознакомиться здесь).

Файлы сборки (.ninja)

Основой Ninja являются текстовые файлы с правилами, переменными и целями. Формат прост и не содержит условных конструкций или циклов — вся логика должна быть реализована на этапе генерации.

Ключевые элементы файла:

  • Переменные: cflags = -Wall, builddir = out;
  • Правила: определяют команды и опции для обработки файлов;
  • Сборки: связывают входные файлы с выходными через правило;
  • По умолчанию: цель, которая будет собрана при запуске без аргументов.

Генераторы сборки

Ninja не предназначен для написания правил вручную. Вместо этого используются генераторы, которые анализируют проект и создают оптимальный .ninja файл.

Популярные генераторы:

  • CMake: -G Ninja генерирует правила для компиляции на любой платформе;
  • Meson: использует Ninya как встроенный бэкенд по умолчанию;
  • GN: генератор, разработанный для Chromium, создаёт высокооптимизированные файлы Ninja;
  • Python: библиотека ninja_syntax.py позволяет генерировать .ninja скрипты программно.

Правила и команды

Правила в Ninja определяют, как преобразовывать одни файлы в другие. Они содержат командную строку, переменные окружения и описание.

Основные атрибуты правил:

  • command — команда для выполнения (с поддержкой переменных);
  • description — краткое описание (выводится при сборке);
  • depfile — файл зависимостей, сгенерированный компилятором;
  • generator — флаг, указывающий, что правило создаёт файлы, используемые другими правилами.

Граф зависимостей

Ninja строит граф зависимостей на основе объявленных входов и выходов. Это позволяет выполнять только минимально необходимые действия при изменении исходных файлов.

Особенности графа:

  • явное указание зависимостей через in и out;
  • поддержка неявных зависимостей (через depfile);
  • порядок сборки определяется топологической сортировкой;
  • возможность задавать «теневые» зависимости (order-only).

Производительность и параллелизм

Ninja изначально спроектирован для высокой производительности. Он минимизирует операции ввода-вывода, не выполняет лишних проверок и максимально загружает все доступные ядра.

Ключевые оптимизации:

  • запуск команд в нескольких потоках (по умолчанию число ядер);
  • компактное двоичное представление графа в памяти;
  • использование stat() только для изменённых файлов;
  • кэширование результатов проверки времени модификации.

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "ninja/1.12.1@aurora",
    )    

Процесс локальной сборки описан в документации.

ninja

Ninja is a small build system with a focus on speed
Лицензия
Apache-2.0
Версия
Домашняя страница
Скачать
x86_64
3.55 Mb
MD5: a1824757fb1406c80442dfa0f603118d
Updated: 08.04.2026, 20:54:56
armv8
3.16 Mb
MD5: 2f42e3352bb8d603747400268c1884d8
Updated: 08.04.2026, 20:54:47
armv7
3.08 Mb
MD5: ddca3f0982f627ccc5474c9b70c22f77
Updated: 08.04.2026, 20:54:54
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.