gn

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

Особенности

  • высокая скорость генерации файлов сборки даже для больших проектов;
  • поддержка множества платформ и конфигураций (кросс-компиляция, различные целевые архитектуры);
  • возможность расширения через шаблоны (templates) и пользовательские правила;
  • интеграция с системой Ninja для максимально эффективной инкрементальной сборки.

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

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

Язык описания сборки

GN использует декларативный язык описания сборки, который позволяет определять цели (targets), их зависимости и параметры сборки. Язык прост для чтения и написания, при этом обладает мощными возможностями.

Основные элементы языка:

  • Цели (targets): описание библиотек, исполняемых файлов, групп и других артефактов сборки;
  • Зависимости (dependencies): указание отношений между целями;
  • Конфигурации (configs): наборы флагов компиляции и других параметров;
  • Шаблоны (templates): многократно используемые шаблоны для создания целей;
  • Переменные (variables): глобальные и локальные переменные для управления сборкой.

Генерация файлов Ninja

Основная задача GN — преобразование описания проекта на языке GN в файлы сборки для Ninja. Этот процесс выполняется быстро и позволяет Ninja выполнять инкрементальные сборки с минимальными накладными расходами.

Процесс генерации:

  • Парсинг файлов .gn и BUILD.gn для построения графа зависимостей;
  • Разрешение конфигураций и применений их к целям;
  • Генерация файлов .ninja для каждого каталога сборки;
  • Создание файла build.ninja в корневой директории сборки.

Управление конфигурациями и вариантами сборки

GN предоставляет гибкие механизмы для управления конфигурациями сборки, позволяя легко переключаться между различными вариантами (debug, release, для разных платформ и архитектур).

Возможности управления конфигурациями:

  • Предопределенные конфигурации для компиляторов и целевых платформ;
  • Возможность создания пользовательских конфигураций и вариантов сборки;
  • Поддержка кросс-компиляции и сборки для нескольких целевых архитектур в одном дереве;
  • Наследование и переопределение конфигураций.

Встроенные функции и шаблоны

GN включает богатый набор встроенных функций и шаблонов для выполнения общих задач сборки, таких как компиляция библиотек, создание исполняемых файлов, копирование файлов и другие.

Встроенные функции:

  • executable() — создание исполняемого файла;
  • static_library() и shared_library() — создание статических и динамических библиотек;
  • source_set() — группа исходных файлов, которые не требуют отдельной библиотеки;
  • group() — объединение нескольких целей в одну;
  • copy() — копирование файлов в выходной каталог;
  • action() и action_foreach() — выполнение пользовательских команд.

Расширяемость и пользовательские шаблоны

Разработчики могут создавать собственные шаблоны для инкапсуляции повторяющихся паттернов сборки, что позволяет уменьшить дублирование кода и упростить поддержку больших проектов.

Создание пользовательских шаблонов:

  • Определение шаблонов с помощью template();
  • Передача параметров в шаблоны и их использование в целях;
  • Использование шаблонов для генерации сложных целей с минимальным описанием;
  • Совместное использование шаблонов между разными проектами.

Инструменты командной строки

GN предоставляет набор инструментов командной строки для управления сборкой, генерации файлов, анализа зависимостей и других задач.

Основные команды:

  • gn gen — генерация файлов Ninja для указанной конфигурации;
  • gn check — проверка целостности и корректности файлов .gn и BUILD.gn;
  • gn desc — вывод информации о целях и их зависимостях;
  • gn format — автоматическое форматирование файлов .gn и BUILD.gn;
  • gn clean — очистка сгенерированных файлов.

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

Документация по использованию 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 = (
        "gn/cci.20210429@aurora",
    )    

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

gn

GN is a meta-build system that generates build files for Ninja.
Лицензия
BSD-3-Clause
Версия
Домашняя страница
Скачать
x86_64
1.29 Mb
MD5: 5720f2dd22492e01ecabdbf1c8007af5
Updated: 04.09.2025, 10:49:00
armv8
1.17 Mb
MD5: fdfa45b8027880bdade5de299b11fb51
Updated: 04.09.2025, 10:48:45
armv7
1.02 Mb
MD5: e9bd2614fb2d6bc88ef844a2f85f106f
Updated: 04.09.2025, 10:48:58
Использование в проекте

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

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