Unreal Engine 5.1设置CppStandard为C++20编译失败求助
解决Unreal Engine 5.1 Linux下C++20编译错误的方案
问题根源
UE5.1引擎核心代码SHMath.h中存在匿名枚举间的算术运算,C++20标准将这类操作标记为废弃警告,而UE默认会把警告当作错误处理,最终导致编译失败。由于你未从源码编译引擎,只能通过项目层面的配置规避该问题。
具体解决步骤
1. 修改项目的*.Build.cs文件
在项目的Build.cs中,除了设置C++20标准,还要添加针对该特定警告的禁用规则:
using UnrealBuildTool; public class YourProjectName : ModuleRules { public YourProjectName(ReadOnlyTargetRules Target) : base(Target) { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" }); // 设置C++20标准 CppStandard = CppStandardVersion.Cpp20; // 启用编译器警告覆盖,禁用目标警告 bOverrideCompilerWarnings = true; // 禁用匿名枚举转换的废弃警告 AddCompilerFlags("-Wno-deprecated-anon-enum-enum-conversion"); // 若单独禁用警告无效,全局关闭警告转错误 bEnableWarningsAsErrors = false; } }
2. 调整Rider的检查规则
打开Rider的File > Settings > Languages & Frameworks > C/C++ > Inspection Settings,找到Deprecated anonymous enum-enum conversion检查项,将其等级改为「Warning」或「Do not show」,避免IDE误报错误。
3. 验证构建
修改完成后,可直接在Rider中点击构建按钮,或在终端运行UE构建命令:
./YourProjectName.sh -build
补充说明
如果之前修改BuildConfig.xml无效,确保你修改的是项目目录下Config文件夹中的BuildConfig.xml,而非引擎目录下的文件。可添加以下内容全局禁用警告转错误:
<?xml version="1.0" encoding="utf-8" ?> <Configuration xmlns="https://www.unrealengine.com/BuildConfiguration"> <BuildConfiguration> <bWarningsAsErrors>false</bWarningsAsErrors> </BuildConfiguration> </Configuration>
内容的提问来源于stack exchange,提问作者Koronis Neilos
相关产品推荐
相关产品推荐

