Полезное

Мы Вконтакте

Discord канал

#
Модератор: Di-Crash
Аватара пользователя
Пользователь
Сообщения: 9
В своем cpp файле пишу

#include "Engine/Canvas.h"

Но реально же файл canvas.h в solution explorer находится в ветке Engine/UE4/Source/Runtime/Engine/Classes/Engine/Canvas.h

Как VS понимает, что Engine/Canvas.h надо искать именно в Engine/UE4/Source/Runtime/Engine/Classes/ ? Я бы сам не нашел, если бы поиск не запустил.
Аватара пользователя
Пользователь
Сообщения: 589
А в чем вопрос то ?

Ну для упрощения так сделано... Что всё необходимое уже встроено.
Аватара пользователя
Пользователь
Сообщения: 9
Почему в include надо писать именно Engine/Canvas.h ? Не Classes/Engine/Canvas.h, не Runtime/Engine/Classes/Engine/Canvas.h, не Canvas.h.
Как будто где-то записано что все относительные пути надо искать именно начиная с папки Engine/UE4/Source/Runtime/Engine/Classes/
Т.е. похоже в студии есть нечто, напоминающее переменную окружения path в операционной системе, какой-то аналог.
Аватара пользователя
Пользователь
Сообщения: 9
Разобрался
Т.к. движок состоит из модулей, каждый модуль имеет свой относительный путь. Собственно, canvas.h находится в модуле "engine", путь к которому:
/UE4/Source/Runtime/Engine/
А Unreal Build Tool в файле UEBuildModuleCPP.cs включает еще и дополнительные папки в путь поиска. Это папки Private, Public и Classes

UEBuildModuleCPP.cs:
Код:
private void AddDefaultIncludePaths()
        {
            // Add the module's parent directory to the public include paths, so other modules may include headers from it explicitly.
            PublicIncludePaths.Add(ModuleDirectory.ParentDirectory);

            // Add the base directory to the legacy include paths.
            LegacyPublicIncludePaths.Add(ModuleDirectory);

            // Add the 'classes' directory, if it exists
            DirectoryReference ClassesDirectory = DirectoryReference.Combine(ModuleDirectory, "Classes");
            if (DirectoryLookupCache.DirectoryExists(ClassesDirectory))
            {
                PublicIncludePaths.Add(ClassesDirectory);
            }

            // Add all the public directories
            DirectoryReference PublicDirectory = DirectoryReference.Combine(ModuleDirectory, "Public");
            if (DirectoryLookupCache.DirectoryExists(PublicDirectory))
            {
                PublicIncludePaths.Add(PublicDirectory);

                ReadOnlyHashSet<string> ExcludeNames = UEBuildPlatform.GetBuildPlatform(Rules.Target.Platform).GetExcludedFolderNames();
                EnumerateLegacyIncludePaths(DirectoryItem.GetItemByDirectoryReference(PublicDirectory), ExcludeNames, LegacyPublicIncludePaths);
            }

            // Add the base private directory for this module
            DirectoryReference PrivateDirectory = DirectoryReference.Combine(ModuleDirectory, "Private");
            if(DirectoryLookupCache.DirectoryExists(PrivateDirectory))
            {
                PrivateIncludePaths.Add(PrivateDirectory);
            }
        }


Поэтому инклуд для любого объекта из модуля "engine" можно указывать относительно папки Engine/UE4/Source/Runtime/Engine/Classes/


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница