13 августа 2023 г.

Пошаговая инструкция по подключению библиотеки Boost к Unreal Engine 4 в виде модуля

Следует оговориться, что это лишь один из вариантов.

Например, ваш проект называется QuickStart, библиотека собрана компилятором vc под платформу win64.

  • Предварительно собрать либы для используемой архитектуры и компилятора
  • Создать папки QuickStart\Source\Boost\Private и QuickStart\Source\Boost\Public
  • Создать файл QuickStart\Source\Boost\Boost.Build.cs (листинг 1)
  • Разместить хедеры в QuickStart\Source\Boost\Public\boost
  • Разместить бинарники либ в QuickStart\Source\Boost\Private
  • В этой же папке создать файл BoostModule.cpp (листинг 2)
  • В QuickStart.uproject изменить код для ключа Modules (листинг 3)
  • В QuickStart\Source\QuickStart\QuickStart.Build.cs в PublicDependencyModuleNames добавить имя модуля Boost
  • В QuickStart\Source\QuickStart\QuickStart.Build.cs в конструктор обязательно добавить код (листинг 4)

Листинг 1

using System.IO;
using UnrealBuildTool;

public class Boost : ModuleRules {

    protected string version = "1_82";

    protected string[] libNames = new string[] {
        "libboost_atomic",
        "libboost_chrono",
        "libboost_container",
        "libboost_context",
        "libboost_contract",
        "libboost_coroutine",
        "libboost_date_time",
        "libboost_exception",
        "libboost_fiber",
        "libboost_filesystem",
        "libboost_graph",
        "libboost_iostreams",
        "libboost_json",
        "libboost_locale",
        "libboost_log",
        "libboost_log_setup",
        "libboost_math_c99",
        "libboost_math_c99f",
        "libboost_math_c99l",
        "libboost_math_tr1",
        "libboost_math_tr1f",
        "libboost_math_tr1l",
        "libboost_nowide",
        "libboost_prg_exec_monitor",
        "libboost_program_options",
        "libboost_python39",
        "libboost_random",
        "libboost_regex",
        "libboost_serialization",
        "libboost_stacktrace_noop",
        "libboost_stacktrace_windbg",
        "libboost_stacktrace_windbg_cached",
        "libboost_system",
        "libboost_test_exec_monitor",
        "libboost_thread",
        "libboost_timer",
        "libboost_type_erasure",
        "libboost_unit_test_framework",
        "libboost_url",
        "libboost_wave",
        "libboost_wserialization"
    };

    public Boost(ReadOnlyTargetRules Target) : base(Target) {

        PrivateDependencyModuleNames.AddRange(new string[] {
            "Core", "CoreUObject", "Engine"
        });

        PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "Public"));

        if (Target.Platform == UnrealTargetPlatform.Win64) {
            string platform = "x64";
            if (Target.WindowsPlatform.Architecture != WindowsArchitecture.x64) {
                platform = "x32";
            }
            string compiler = "vc143"; // need check compiler!
            string debug = "-";
            if (Target.Configuration == UnrealTargetConfiguration.Debug) {
                debug = "-gd-";
            }
            string[] tailParts = new string[] {
                platform, version
            };
            string tail = string.Join("-", tailParts);
            foreach (string libName in libNames) {
                string[] headParts = new string[] {
                    libName, compiler, "mt"
                };
                string head = string.Join("-", headParts);
                string name = Path.Combine(
                    ModuleDirectory,
                    "Private",
                    head + debug + tail + ".lib"
                );
                PublicAdditionalLibraries.Add(name);
            }
        }
    }
}

Листинг 2

#include "Modules/ModuleManager.h"

IMPLEMENT_MODULE(FDefaultModuleImpl, ModuleTest);

Листинг 3

{
    //...
    "Modules": [
        {
            "Name": "QuickStart",
            "Type": "Runtime",
            "LoadingPhase": "Default",
            "AdditionalDependencies": [
                "Engine"
            ]
        },
        {
            "Name": "Boost",
            "Type": "Runtime"
        }
    ],
    //...
}

Листинг 4

bUseRTTI = true;
bEnableExceptions = true;

Комментариев нет:

Отправить комментарий