gpt4 book ai didi

c++ - 如何在 VS 2017 上使用 UnrealEngine 4.19 启用 C++17 模式?

转载 作者:行者123 更新时间:2023-12-03 10:05:50 32 4
gpt4 key购买 nike

UnrealEngine 4.19 默认使用 Visual Studio 2017 的 C++14 模式。 Visual Studio 2017 编译器有一个标志 /std:c++17启用 C++17 和随后的类似 <optional>std::optional .

我尝试将以下行添加到 VCToolChain.cs ( C:\Program Files\Epic Games\UE_4.19\Engine\Source\Programs\UnrealBuildTool\Platform\Windows\VCToolChain.cs ):

void AppendCLArguments_Global(CppCompileEnvironment CompileEnvironment, VCEnvironment EnvVars, List<string> Arguments)
{
Arguments.Add("/std:c++17");
// ... the rest of this function.

然而这似乎没有任何作用,例如 #include <optional>仍然导致构建错误 fatal error C1189: #error: class template optional is only available with C++17. .
很难找到有关此的任何信息,甚至尝试使用 UnrealBuildTool (UBT) 调用的编译器标志来查找 cl.exe ... 其他答案建议添加 -verbose到 nmake “构建命令行”设置(所以我的看起来像: "C:\Program Files\Epic Games\UE_4.19\Engine\Build\BatchFiles\Build.bat" DemoApp Win64 DebugGame "$(SolutionDir)$(ProjectName).uproject" -WaitMutex -FromMsBuild -verbose 但它所做的只是输出详细的 UBT 消息,而不是编译器命令行调用输出。

最佳答案

简短回答:添加 -CppStd=Cpp17给您的 UnrealBuildTool.exe编译命令。
奇怪的是,这似乎没有任何记录,我不得不深入研究引擎的 .cs 文件才能找到它。
更具体地说,在文件“C:/Program Files (x86)/Epic Games/UE_4.26/Engine/Source/Programs/UnrealBuildTool/Configuration/TargetRules.cs”中,有:

        /// <summary>
/// Which C++ stanard to use for compiling this target
/// </summary>
[RequiresUniqueBuildEnvironment]
[CommandLine("-CppStd")]
[XmlConfigFile(Category = "BuildConfiguration")]
public CppStandardVersion CppStandard = CppStandardVersion.Default;
然后,在另一个文件中,定义 CppStandardVersion是 :
 public enum CppStandardVersion
{
/// <summary>
/// Use the default standard version
/// </summary>
Default,

/// <summary>
/// Supports C++14
/// </summary>
Cpp14,

/// <summary>
/// Supports C++17
/// </summary>
Cpp17,

/// <summary>
/// Latest standard supported by the compiler
/// </summary>
Latest,
}

所以,我用 -cmakefile 生成了我的项目文件,然后我打开了我的 CMakeLists.txt并添加 -CppStd=Latest到我的 Build.bat编译命令,以及 std::optional 的错误离开了 !

关于c++ - 如何在 VS 2017 上使用 UnrealEngine 4.19 启用 C++17 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50887549/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com