# Системы сборки / Build systems

**Системы сборки** – это специальные программы, которые позволяют автоматически собрать код проекта по заданным правилам.

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

Помимо этого они занимаются _подключением к проекту библиотек и программ_.

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

## Автоматизация сборки

**включает**:

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

**а также**:

* выполнение автотестов;
* развёртывание программы в целевой среде;
* составление сопроводительной документации или описание изменений новой версии;
* конфигурация и подготовка файлов к сборке;
* составление отчётов;
* ...

{% @mermaid/diagram content="stateDiagram-v2
    direction TB
    state description 
    
    state "Высоуровневые" as HL
    {
    state "Gradle" as gradle
    state "SCons" as scons
        Meson
        CMake
        Autoconf
        MSBuild
    }
    state "Низкоуровневые" as LL
    {
        state "Bash/pwsh/...<br> скрипт на любом языке" as scripts
        state "Вручную<br>через терминал" as manual
        Make
        Ninja
        NMake
    }
    MSBuild -->  NMake : used
    Autoconf --> Make : used
    CMake --> Make : used[unix]
    CMake --> Ninja : used[windows]
    Meson --> Ninja : used
    MSBuild --> Ninja : used" %}
