[BUG]关于UE5.6编译时出现“Microsoft.MakeFile.Targets(44,5): Error MSB3073”问题的解决

原项目时UE5.3的,我把它转换成UE5.6,提前删除了系统生成的中间文件,只保留编译必要的文件,使用UE5.6编译项目时,编译失败,Rider编辑器提示如下问题

bash 复制代码
11>Microsoft.MakeFile.Targets(44,5): Error MSB3073 : 命令""G:\Unreal Engine\UE_5.6\Engine\Build\BatchFiles\Build.bat" AuraEditor Win64 Development -Project="XXXXXXXXXXX" -WaitMutex -FromMsBuild -architecture=x64"已退出,代码为 6。

对应到出问题的代码:

xml 复制代码
<Target Name="Build" DependsOnTargets="PrepareForNMakeBuild;ResolveReferences;GetTargetPath;$(PreNMakeBuildTarget)" Returns="$(NMakeManagedOutput)">
    <VCMessage Code="MSB8005" Type="Warning" Arguments="NMakeBuildCommandLine" Condition="'$(NMakeBuildCommandLine)'==''"/>
    <Exec Command="$(NMakeBuildCommandLine)" Condition="'$(NMakeUseOemCodePage)' == 'true' and '$(NMakeBuildCommandLine)'!=''"/>
    <Exec Command="$(NMakeBuildCommandLine)" UseUtf8Encoding="Always" StdErrEncoding="UTF-8" StdOutEncoding="UTF-8" Condition="'$(NMakeUseOemCodePage)' != 'true' and '$(NMakeBuildCommandLine)'!=''"/>
  </Target>

指向

xml 复制代码
<Exec Command="$(NMakeBuildCommandLine)" Condition="'$(NMakeUseOemCodePage)' == 'true' and '$(NMakeBuildCommandLine)'!=''"/>

我找了一个UE5.6编译成功的项目和当前项目,对比了一下Target.cs文件:

成功的Target.cs文件

csharp 复制代码
// Copyright Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;
using System.Collections.Generic;

public class RPGGameTarget : TargetRules
{
	public RPGGameTarget(TargetInfo Target) : base(Target)
	{
		Type = TargetType.Game;
		DefaultBuildSettings = BuildSettingsVersion.V5;
		IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_6;
		ExtraModuleNames.Add("RPGGame");
	}
}

失败的Target.cs文件

csharp 复制代码
// Copyright Druid Mechanics

using UnrealBuildTool;
using System.Collections.Generic;

public class AuraTarget : TargetRules
{
	public AuraTarget(TargetInfo Target) : base(Target)
	{
		Type = TargetType.Game;
		DefaultBuildSettings = BuildSettingsVersion.V2;

		ExtraModuleNames.AddRange( new string[] { "Aura" } );
	}
}

成功的Editor.Target.cs文件

csharp 复制代码
// Copyright Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;
using System.Collections.Generic;

public class RPGGameEditorTarget : TargetRules
{
	public RPGGameEditorTarget( TargetInfo Target) : base(Target)
	{
		Type = TargetType.Editor;
		DefaultBuildSettings = BuildSettingsVersion.V5;
		IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_6;
		ExtraModuleNames.Add("RPGGame");
	}
}

失败的Editor.Target.cs文件

csharp 复制代码
// Copyright Druid Mechanics

using UnrealBuildTool;
using System.Collections.Generic;

public class AuraEditorTarget : TargetRules
{
	public AuraEditorTarget(TargetInfo Target) : base(Target)
	{
		Type = TargetType.Editor;
		DefaultBuildSettings = BuildSettingsVersion.V2;

		ExtraModuleNames.AddRange( new string[] { "Aura" } );
	}
}

看起来新版本字段上有一些变化,所以将失败的cs文件根据新的字段改写一下:

更新后的Target.cs文件

csharp 复制代码
// Copyright Druid Mechanics

using UnrealBuildTool;
using System.Collections.Generic;

public class AuraTarget : TargetRules
{
	public AuraTarget(TargetInfo Target) : base(Target)
	{
		Type = TargetType.Game;
		DefaultBuildSettings = BuildSettingsVersion.V5;
		IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_6;
		ExtraModuleNames.Add("Aura");
	}
}

更新后的Editor.Target.cs文件

csharp 复制代码
// Copyright Druid Mechanics

using UnrealBuildTool;
using System.Collections.Generic;

public class AuraEditorTarget : TargetRules
{
	public AuraEditorTarget(TargetInfo Target) : base(Target)
	{
		Type = TargetType.Editor;
		DefaultBuildSettings = BuildSettingsVersion.V5;
		IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_6;
		ExtraModuleNames.Add("Aura");
	}
}

删除不必要的中间文件,再用uproject重新生成sln,再次编译

又提示了新的错误:提示只支持uint8

cpp 复制代码
UENUM(BlueprintType)
enum class EEffectApplicationPolicy
{
	ApplyOnOverlap,
	ApplyOnEndOverlap,
	DoNotApply
};

UENUM(BlueprintType)
enum class EEffectRemovalPolicy
{
	RemoveOnEndOverlap,
	DoNotRemove
};

修改后

cpp 复制代码
UENUM(BlueprintType)
enum class EEffectApplicationPolicy: uint8
{
	ApplyOnOverlap,
	ApplyOnEndOverlap,
	DoNotApply
};

UENUM(BlueprintType)
enum class EEffectRemovalPolicy: uint8
{
	RemoveOnEndOverlap,
	DoNotRemove
};

再次编译 又出现新的问题:

cpp 复制代码
11>AuraAbilitySystemLibrary.cpp(465,8): Error C2027 : 使用了未定义类型"FOverlapResult"

参考如下文档:

Gameplay Ability System Course Project - Development Blog

FOverlapResult::FOverlapResult

添加一个头文件:

cpp 复制代码
#include "Engine/OverlapResult.h"

编译成功

相关推荐
滨HI07 小时前
C++ opencv简化轮廓
开发语言·c++·opencv
学习路上_write7 小时前
FREERTOS_互斥量_创建和使用
c语言·开发语言·c++·stm32·单片机·嵌入式硬件
闻缺陷则喜何志丹8 小时前
【SOSDP模板 容斥原理 逆向思考】3757. 有效子序列的数量|分数未知
c++·算法·力扣·容斥原理·sosdp·逆向思考
BestOrNothing_20159 小时前
一篇搞懂 C++ 重载:函数重载 + 运算符重载,从入门到会用(含 ++、<<、== 实战)
c++·函数重载·运算符重载·operator·前置后置++·重载与重写
2501_941144429 小时前
Python + C++ 异构微服务设计与优化
c++·python·微服务
程序猿编码9 小时前
PRINCE算法的密码生成器:原理与设计思路(C/C++代码实现)
c语言·网络·c++·算法·安全·prince
charlie11451419110 小时前
深入理解C/C++的编译链接技术6——A2:动态库设计基础之ABI设计接口
c语言·开发语言·c++·学习·动态库·函数
Cx330❀10 小时前
C++ STL set 完全指南:从基础用法到实战技巧
开发语言·数据结构·c++·算法·leetcode·面试
zmzb010310 小时前
C++课后习题训练记录Day33
开发语言·c++
Want59511 小时前
C/C++贪吃蛇小游戏
c语言·开发语言·c++