Skip to content
yurii.levchenko edited this page Mar 17, 2026 · 1 revision

Build System

Mengine использует CMake в качестве системы сборки с поддержкой множества платформ и конфигураций.


Структура CMake

cmake/
├── base_template.cmake              ← Базовая конфигурация и детекция архитектуры
├── build_options_template.cmake      ← Опции сборки (ASAN, PCH)
├── master_options_template.cmake     ← Профиль Master Release
├── dev_options_template.cmake        ← Профиль Development
├── mengine_template.cmake            ← Шаблон сборки движка
├── macro_template.cmake              ← Макросы сборки
├── dependencies_template.cmake       ← Шаблон зависимостей
├── download_template.cmake           ← Скачивание зависимостей
├── Dependencies/                     ← CMake для сторонних библиотек
│   └── CMakeLists.txt
├── Win32/                            ← Windows 32-bit
├── Win64/                            ← Windows 64-bit
├── Win32_DX11/ Win64_DX11/           ← DirectX 11
├── Win32_SDL2/ Win32_SDL3/           ← SDL бекенды
├── Win32_ASAN_ADDRESS/               ← ASAN
├── Android/                          ← Android NDK
├── Xcode_iOS/                        ← iOS
├── Xcode_iOS_Simulator/              ← iOS Simulator
├── Xcode_iOS_AppClip/                ← iOS App Clip
├── Xcode_MacOS/                      ← macOS
├── GDK/                              ← Xbox GDK
├── UWP/                              ← Universal Windows Platform
├── Unix/                             ← Linux/POSIX
├── MinGW/ MinGW64/                   ← MinGW (GCC для Windows)
├── Emscripten/                       ← WebAssembly
└── Tools_Win32/ Tools_Win64/         ← Инструменты

Опции сборки

Основные опции

Опция По умолчанию Описание
MENGINE_USE_ADDRESS_SANITIZE OFF Address Sanitizer для отладки памяти
MENGINE_USE_PRECOMPILED_HEADER OFF Прекомпилированные заголовки

Профили сборки

Master Release (master_options_template.cmake)

Опция По умолчанию Описание
MENGINE_BUILD_MENGINE_MASTER_RELEASE ON Режим мастер-релиза
MENGINE_BUILD_MENGINE_BUILD_PUBLISH OFF Публикация билда
MENGINE_BUILD_MENGINE_DEVELOPMENT OFF Режим разработки
MENGINE_BUILD_MENGINE_SCRIPT_EMBEDDED ON Встроенные скрипты
MENGINE_EXTERNAL_PDB OFF Внешние PDB файлы
MENGINE_USE_SUBFOLDER OFF Использование подпапок
Строковая опция По умолчанию Описание
MENGINE_SUBFOLDER_NAME "Mengine" Имя подпапки
MENGINE_INSTALL_PATH "" Путь установки
MENGINE_SECURE_VALUE "0123456789A" Значение безопасности
MENGINE_EXTERNAL_PDB_PATH "" Путь к внешним PDB
MENGINE_EXTERNAL_SOURCE_PATH "" Внешние пути к исходникам
MENGINE_EXTERNAL_TEMP_PATH "" Временные пути

Development (dev_options_template.cmake)

Аналогичен Master, но MENGINE_BUILD_MENGINE_MASTER_RELEASE = OFF.


Детекция платформы

base_template.cmake автоматически определяет:

  • Архитектура: MENGINE_ARCHITECTURE_X86, X64, ARM, AARCH64
  • Платформа: MENGINE_TARGET_WINDOWS, ANDROID, IOS, MACOS, UNIX, EMSCRIPTEN, UWP
  • Рендер: MENGINE_RENDER_DIRECTX9, DIRECTX11, OPENGL
  • Тулчейн: MENGINE_TOOLCHAIN_MSVC, MINGW, XCODE, GCC, GRADLE, EMSCRIPTEN

Процесс сборки

Шаг 1: Скачивание зависимостей

Mengine\build\downloads\downloads.bat

Шаг 2: Сборка зависимостей

:: Формат: build_depends_{platform}_{config}.bat
Mengine\build\msvc17\build_depends_msvc17_debug.bat

CMake конфигурирует и собирает все зависимости из cmake/Dependencies/CMakeLists.txt.

Шаг 3: Генерация решения

:: Формат: make_solution_{platform}_{config}.bat
Mengine\build\msvc17\make_solution_msvc17_debug.bat

Шаг 4: Сборка проекта

:: Формат: build_solution_{platform}_{config}.bat
Mengine\build\msvc17\build_solution_msvc17_debug.bat

Скрипты сборки

build/
├── downloads/              ← Скрипты скачивания зависимостей
├── build_depends.bat       ← Общий скрипт сборки зависимостей
├── build_solution.bat      ← Общий скрипт сборки решения
├── cmake_configure.bat     ← Конфигурация CMake
├── make_depends.bat        ← Генерация проекта зависимостей
├── make_solution.bat       ← Генерация решения
├── process_depends.bat     ← Постобработка зависимостей
├── process_solution.bat    ← Постобработка решения
├── vcvarsall_msvc15.bat    ← Окружение VS 2017
├── vcvarsall_msvc16.bat    ← Окружение VS 2019
├── vcvarsall_msvc17.bat    ← Окружение VS 2022
└── vcvarsall_msvc18.bat    ← Окружение VS (будущая версия)

Типы сборки

Тип CMake Описание
Debug CMAKE_BUILD_TYPE=Debug Полная отладочная информация, assertions
Release CMAKE_BUILD_TYPE=Release Максимальная оптимизация
RelWithDebInfo CMAKE_BUILD_TYPE=RelWithDebInfo Release с отладочными символами

Конфигурации MSVC

Конфигурация Описание
msvc17 Visual Studio 2022, Win32, DirectX 9
msvc17_x64 Visual Studio 2022, x64
msvc17_dx11 Visual Studio 2022, DirectX 11
msvc17_dx11_x64 Visual Studio 2022, x64, DirectX 11
msvc17_sdl2 Visual Studio 2022, SDL2
msvc17_sdl3 Visual Studio 2022, SDL3
msvc17_gdk Visual Studio 2022, Xbox GDK
msvc17_uwp Visual Studio 2022, UWP
msvc17_asan_address Visual Studio 2022, Address Sanitizer

Android (Gradle + NDK)

gradle/
├── build.gradle            ← Корневая конфигурация
├── settings.gradle.kts     ← Настройки проекта (Kotlin DSL)
├── gradle.properties       ← Свойства сборки
├── gradlew / gradlew.bat   ← Gradle Wrapper
├── app/                    ← Основной модуль приложения
├── libraries/              ← Библиотеки
├── base.gradle             ← Базовая конфигурация
├── androidx.gradle         ← Зависимости AndroidX
├── gms.gradle              ← Google Mobile Services
├── delivery.gradle         ← Конфигурация релиза
├── minify.gradle           ← Минификация (ProGuard/R8)
└── plugins/                ← Пользовательские Gradle-плагины

Параметры Android NDK:

  • NDK: 29.0.14206865
  • CMake: 3.31.6
  • API Level: 23+
  • ABI: x86, x86_64, armeabi-v7a, arm64-v8a
  • STL: c++_shared
  • Компилятор: Clang (NDK)
  • NEON: включен

Выходные директории

Mengine/
├── bin/                    ← Бинарные файлы
│   ├── Mengine_WIN32/
│   ├── Mengine_WIN64_DX11/
│   ├── Mengine_GDK/
│   ├── Tools_WIN32/
│   └── ...
├── outputs/                ← Промежуточные файлы
└── solutions/              ← Сгенерированные проекты
    ├── solution_msvc17_debug/
    ├── solution_msvc17_release/
    └── ...

См. также

Clone this wiki locally