# Системы сборки / 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" %}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://skkv-itmo.gitbook.io/c-cpp-cookies/build/build-systems.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
