Разобрался
Т.к. движок состоит из модулей, каждый модуль имеет свой относительный путь. Собственно, 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/