从UE5.1升级到UE5.4的几个编译失败问题
- $(ProjectRoot)/Source/Project.Target.cs以及ProjectEditor.Target.cs
- DefaultBuildSettings = BuildSettingsVersion.V4; // 5.1中为V2
- Plugin.Build.cs里的变化
if (Target.bBuildEditor) { PrivateIncludePaths.Add(System.IO.Path.Combine(GetModuleDirectory("LevelEditor"), "Private")); PrivateDependencyModuleNames.Add("LevelEditor"); PrivateDependencyModuleNames.Add("SourceControlWindows"); PrivateDependencyModuleNames.Add("ProjectSettingsViewer"); PrivateDependencyModuleNames.Add("UnrealEd"); PrivateDependencyModuleNames.Add("AssetTools"); PrivateDependencyModuleNames.Add("ToolMenus"); PrivateDependencyModuleNames.Add("Blutility"); }
注意上面PrivateIncludePaths加入了LevelEditor/Private目录,则包含头文件时应如下:
#if (ENGINE_MAJOR_VERSION >= 5) && (ENGINE_MINOR_VERSION <= 1) #include "LevelEditor/Private/SLevelEditor.h" #else #include "SLevelEditor.h" #endif
同样的还有Classes目录的头文件引用:
#if (ENGINE_MAJOR_VERSION >= 5) && (ENGINE_MINOR_VERSION <= 1) #include "LevelEditor/Private/SLevelEditor.h" #include "Blutility/Classes/EditorUtilityWidgetBlueprint.h" #else #include "EditorUtilityWidgetBlueprint.h" #endif
module.build.cs文件常见字段
string path = Path.Combile(p1, p2, p3);
string absolutePath = Path.GetFullPath(path);
string absolutePath = Path.GetFullPath(path);
//https://docs.unrealengine.com/4.27/en-US/ProductionPipelines/BuildTools/UnrealBuildTool/ThirdPartyLibraries/
RuntimeDependencies.Add(Path.GetFullPath(absolutePath), StagedFileType.NonUFS);
RuntimeDependencies.Add(Path.GetFullPath(absolutePath), StagedFileType.NonUFS);
PublicDependencyModuleNames/PrivateDependencyModuleNames属于静态链接,通常其PublicIncludePaths/PrivateIncludePaths会自行处理正确。
PublicIncludePathModuleNames/PrivateIncludePathModuleNames与DynamicallyLoadedModuleNames配合属于动态链接,因此如果你使用了非抽象函数,则会提示无法找到链接符号。这一对配置的典型用法参考 #474,一般就是LoadModuleChecked,然后调用接口的抽象函数。
PublicIncludePathModuleNames/PrivateIncludePathModuleNames与DynamicallyLoadedModuleNames配合属于动态链接,因此如果你使用了非抽象函数,则会提示无法找到链接符号。这一对配置的典型用法参考 #474,一般就是LoadModuleChecked,然后调用接口的抽象函数。
关于PublicSystemLibraryPaths,PublicAdditionalLibraries,PublicLibraryPaths的问题
在(<)UE4.24的版本中,指定lib文件的方法跟visual studio里使用的方式一致:
- PublicLibraryPaths用于添加lib文件所在的目录
- PublicAdditionalLibraries用于添加lib文件,不包括路径信息
- 忽略PublicLibraryPaths字段,且PublicAdditionalLibraries字段直接添加lib文件绝对路径。
如果仍坚持老的使用方式,则会报Warning,用以下方式可以消除这个Warning,但并不能消除老的方式的效率低下的问题:
- 用PublicSystemLibraryPaths取代PublicLibraryPaths,用于添加lib文件所在的目录
- 用PublicSystemLibraries来添加库文件,但只需要库的名字即可,不需要后缀。或者直接在cpp中用#pragma comment(lib,"avcodec.lib")这种写法,会从PublicSystemLibraryPaths指定的目录下去寻找