macOS 更新Xcode,UE4编译C++报错variable “LayerNames” set but not used -Wunused-but-set-variable解决方案

这篇具有很好参考价值的文章主要介绍了macOS 更新Xcode,UE4编译C++报错variable “LayerNames” set but not used -Wunused-but-set-variable解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

macOS 更新Xcode,UE4编译C++报错variable “LayerNames” set but not used -Wunused-but-set-variable解决方案

一、背景

本人在一次苹果macOS系统更新(手贱点了一下AppStore里的全部更新)后,发现虚幻引擎UE4.27的C++项目无法编译通过,报错信息为:

variable “LayerNames” set but not used [-Werror,-Wunused-but-set-variable]
                const TArray<FText>* LayerNames = &LayersExpression->GetLayerNames();

经过翻查社区资料:

LayerNames error bricking my Mac projects - Platform & Builds - Unreal Engine Forums

外加本人亲自验证,得出如下两种适用于不同用户的解决方案。

二、解决步骤

(〇)降级Xcode为13.2.x

费力不讨好,开倒车的方案在此不做介绍。

---------

(一)为特定项目添加编译参数

该方案无需重新编译引擎的UnrealBuildTool,可以快速解决问题,但缺点是每个项目,以及新建的项目都需要进行设置。适合新手使用。

步骤:

1. 找到项目目录下如下两个文件:
        Source/项目名称Editor.target.cs     --     对应编辑器调试
        Source/项目名称.target.cs    --      对应无编辑器模式

2. 打开上述两个文件,插入两行代码:

bOverrideBuildEnvironment = true;  // 打开覆盖编译器参数开关
AdditionalCompilerArguments = "-Wno-unused-but-set-variable";  // 增加编译器参数-Wno-unused-but-set-variable以屏蔽该警告。

最终得到的结果类似于:

// Fill out your copyright notice in the Description page of Project Settings.

using UnrealBuildTool;
using System.Collections.Generic;

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

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

        // 插入如下两行
        bOverrideBuildEnvironment = true;  // 打开覆盖编译器参数开关
        AdditionalCompilerArguments = "-Wno-unused-but-set-variable";  // 增加编译器参数-Wno-unused-but-set-variable以屏蔽该警告。
	}
}

3. 保存,编译,问题解决。

--------

(二)修改UnrealBuildTool配置文件并重新编译引擎的UnrealBuildTool。

方案一的问题在于对于每个新建的项目,都需要重复进行上述操作。对于其他平台发来的项目,也需要额外进行相关配置。

方案二采取直接修改引擎UnrealBuildTool的方式,可以在该机器上一劳永逸解决问题,缺点是相比之下更加麻烦,但是磨刀不误砍柴嘛!

步骤:

1. 定位配置文件MacToolChain.cs。可以采用直接搜索的方式定位,或者如果在默认安装位置查找:

/Users/Shared/Epic Games/UE_4.27/Engine/Source/Programs/UnrealBuildTool/Platform/Mac/MacToolChain.cs

2. 打开该文件,查找如下代码:

Result += " -Wall -Werror";

3. 在上面代码下面插入一行代码:

Result += " -Wno-unused-but-set-variable";

最后的结果类似于:

// ...
if (Options.HasFlag(MacToolChainOptions.EnableUndefinedBehaviorSanitizer))
{
	Result += " -fsanitize=undefined";
}			

Result += " -Wall -Werror";
Result += " -Wno-unused-but-set-variable";  // 插入的代码
Result += " -Wdelete-non-virtual-dtor";
			
// clang 12.00 has a new warning for copies in ranged loops. Instances have all been fixed up (2020/6/26) but
// are likely to be reintroduced due to no equivalent on other platforms at this time so disable the warning
if (GetClangVersion().Major >= 12)
{
	Result += " -Wno-range-loop-analysis ";
}			
// ...

4. 保存文件

5. 编译前准备

虚幻引擎默认安装完成后,会对UnrealBuildTool的相关执行文件设置只读权限,阻碍编译过程,为此,我们需要首先备份并删除如下两个目录(默认位置):

/Users/Shared/Epic Games/UE_4.27/Engine/Source/Programs/UnrealBuildTool/obj/Development
/Users/Shared/Epic Games/UE_4.27/Engine/Source/Programs/DotNETCommon/DotNETUtilities/obj/Development

 找到这两个目录并改名为Development.bak之类的即可。

6. 重新编译UnrealBuildTool

由于本人对C#项目在macOS下的编译过程并不熟悉,这里直接使用了JetBrains的跨平台C# IDE,这里也是非常推荐平时在虚幻引擎C++开发过程中使用的Rider来进行编译。

6.1 首先找到UnrealBuildTool的项目描述文件:UnrealBuildTool.csproj,默认位于:

/Users/Shared/Epic Games/UE_4.27/Engine/Source/Programs/UnrealBuildTool/UnrealBuildTool.csproj

6.2 使用Rider打开该文件:macOS 更新Xcode,UE4编译C++报错variable “LayerNames” set but not used -Wunused-but-set-variable解决方案

 6.3 点击扳手按钮开始编译项目macOS 更新Xcode,UE4编译C++报错variable “LayerNames” set but not used -Wunused-but-set-variable解决方案

6.4 数十秒后提示编译成功。如果报权限错误,请回头看 5-编译前准备。macOS 更新Xcode,UE4编译C++报错variable “LayerNames” set but not used -Wunused-but-set-variable解决方案

 完成!

三、原因推断

推测是因为Xcode13.3版本将

unused-but-set-variable

这个warnning选项列为-Wall -Werror的考虑范畴了,而此前版本未在该范畴。

该推测尚未在Xcode版本升级说明内查到,欢迎大佬补充。

希望本帖对各位有所帮助。文章来源地址https://www.toymoban.com/news/detail-400236.html

到了这里,关于macOS 更新Xcode,UE4编译C++报错variable “LayerNames” set but not used -Wunused-but-set-variable解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UE4_UE5源码编译及发布LinuxServer

    :::tip 情景内容 需要开发专用服务器 需要将Server发到云端Linux系统主机 需要关闭SSH,服务一直启用 需要使用UE4 ::: :::danger UE5.1补充内容 准备UE5.1 源码 准备VS2022 准备Linux交叉编译器-v20版本 ::: 1. Visual Studio 2019 1.1 下载 Visual Studio :::warning UE4 编译源码可以使用 VS2022 ,但就此博客

    2024年02月07日
    浏览(38)
  • UE4 Linux交叉编译Clang下载

    必需软件 操作系统 Ubuntu 20.04 (5.0), Ubuntu 22.04 (5.0.2+) 编译器 clang 13.0.1 IDE Visual Studio Code、CLion、QtCreator 推荐开发硬件 处理器 Intel四核处理器或AMD,2.5 GHz或更快 内存 32 GB RAM 显卡 NVIDIA GeForce 960 GTX或更高版本,带最新NVIDIA二进制驱动程序 显存RAM 8 GB或更高 RHI版本 Vulkan:  AMD(

    2024年02月09日
    浏览(43)
  • UE4.27 编译及打包HTML5相关资料

    https://docs.unrealengine.com/4.27/zh-CN/SharingAndReleasing/HTML5/GettingStarted/ UE4.27可以打包HTML5啦 https://github.com/Xi3Chen/UE4.27PackingH5DDoc https://blog.csdn.net/mrbaolong/article/details/131732174?spm=1001.2014.3001.5501

    2024年02月13日
    浏览(46)
  • xcode打包macos报错:FlutterInputs.xcfilelist 和 FlutterOutputs.xcfilelist

    xcode 打包macos的时候,报错如下: Unable to load contents of the file list: ‘macos/ephemeral/FlutterInputs.xcfilelist’ ‘macos/ephemeral/FlutterOutputs.xcfilelist’ 解决方案: 我的项目macos下没有找到FlutterInputs.xcfilelist和FlutterOutputs.xcfilelist。 运行 flutter build macos 后,就生成了上面两个文件。 再次尝

    2024年02月07日
    浏览(87)
  • 虚幻引擎UE4源码编译安装(x86,arm64平台)

    (1)关于运行Setup.sh脚本,mono报错,详情截图如下: 分析:不能执行二进制文件mono,根据错误提示找到源码中涉及到具体执行语句为: “mono Engine/Binaries/DotNET/GitDependencies.exe $ARGS”         GitDependencies.exe可执行文件的作用在线下载UE依赖库,而mono是跨平台.net运行环境,

    2024年02月06日
    浏览(94)
  • UE4无法编译项目。是否要在Visual Studio中打开

    一开始是没装Visual Studio。安装完成后想创建C++项目出现如下报错。 无法编译该项目。要在Visual Studio中打开它吗? Running E:/Epic Games/UE_4.27/Engine/Binaries/DotNET/UnrealBuildTool.exe Development Win64 -Project=\\\"E:/Epic Games/UE_4.27/UnrealProjects/我的项目4/我的项目4.uproject\\\" -TargetType=Editor -Progress -NoE

    2024年02月03日
    浏览(62)
  • 【UE4 C++】03-新建UE C++工程,新建C++类

     UE版本:4.26 新建一个空白模板工程,选择C++项目,选择项目名和项目存储位置,然后点击创建项目。 新建C++类  选择父类为Character  命名,选择公有,然后点击创建类  等待编译完成  此时在Visual Studio中可以看到我们刚才创建的类  在UEEditor中新建一个蓝图类,父类为“

    2024年02月16日
    浏览(41)
  • VS2022(V17.6.4)编译UE4源码配置文件(源码包含自编译CEF)

    https://note.youdao.com/s/BwQ80dXk

    2024年02月08日
    浏览(37)
  • 【UE4】C++编程

    .vs:VS的缓存文件夹; Binaries:存放UE的工程的可执行文件,以及编译的中间文件; Biuld:存放一些编辑器相关的日志; Config:存放游戏的默认配置文件; Content:存放项目资产; DerivedDataCache:主要存放DivX Descriptor File文件,应该是UE为制作影视视频准备的; Plugins:存放项目

    2023年04月08日
    浏览(31)
  • epic商城下载,ue4报错处理

     如果你在epic商城下载游戏或者ue引擎出现了这样的报错,那么不必惊慌,这是epic官方的问题,最近访问了别的社区,有不少的伙伴出现了这样的情况,这是由于epic官方更新了16.0出现的bug,下载老版本启动器即可解决,亲测有效,链接放在下面(版本为14.2.1)https://pan.baid

    2024年02月19日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包