解决从自编译版本UE到安装版本UE报错问题

问题现象:

报错日志targets with a unique build environment cannot be built with an installed engine.错误堆栈如下。

Targets with a unique build environment cannot be built with an installed engine.
CompilationResultException: Targets with a unique build environment cannot be built with an installed engine.
   at UnrealBuildTool.RulesAssembly.CreateTargetRulesInstance(String TypeName, TargetInfo TargetInfo, ILogger Logger, Boolean IsTestTarget, Boolean bSkipValidation) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\System\RulesAssembly.cs:line 653
   at UnrealBuildTool.RulesAssembly.CreateTargetRules(String TargetName, UnrealTargetPlatform Platform, UnrealTargetConfiguration Configuration, UnrealArchitectures Architectures, FileReference ProjectFile, CommandLineArguments Arguments, ILogger Logger, Boolean IsTestTarget, Boolean bSkipValidation, UnrealIntermediateEnvironment IntermediateEnvironment) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\System\RulesAssembly.cs:line 848
   at UnrealBuildTool.ProjectFileGenerator.AddProjectsForAllTargets(PlatformProjectGeneratorCollection PlatformProjectGenerators, List`1 AllGames, List`1 AllTargetFiles, String[] Arguments, List`1 EngineProjects, List`1 GameProjects, Dictionary`2 ProjectFileToUProjectFile, Dictionary`2 ProgramProjects, Dictionary`2 RulesAssemblies, ILogger Logger) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\ProjectFiles\ProjectFileGenerator.cs:line 2782
   at UnrealBuildTool.ProjectFileGenerator.GenerateProjectFiles(PlatformProjectGeneratorCollection PlatformProjectGenerators, String[] Arguments, Boolean bCacheDataForEditor, ILogger Logger) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\ProjectFiles\ProjectFileGenerator.cs:line 1038
   at UnrealBuildTool.GenerateProjectFilesMode.ExecuteAsync(CommandLineArguments Arguments, ILogger Logger) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Modes\GenerateProjectFilesMode.cs:line 65
   at UnrealBuildTool.UnrealBuildTool.Main(String[] ArgumentsArray) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\UnrealBuildTool.cs:line 660
WriteFileIfChanged() wrote 0 changed files of 2 requested writes.

解决方法:

去除source目录下冲突的.target.cs文件。在 Unreal Engine 项目中,.Target.cs 文件是由 Unreal Build System (UBT) 自动调用的。这些文件定义了如何构建项目的不同目标,例如游戏、编辑器或独立应用程序。

记录常见的 .Target.cs 文件类型:

常见的 .Target.cs 文件类型
Game Target(游戏目标): 用于定义游戏的构建配置。通常用于项目的最终输出(客户端)。


public class MyGameTarget : TargetRules
{
    public MyGameTarget(TargetInfo Target) : base(Target)
    {
        Type = TargetType.Game;
        ExtraModuleNames.Add("MyGame");
    }
}
Editor Target(编辑器目标): 定义用于在 Unreal Editor 中加载项目的构建配置。用于开发阶段。


public class MyGameEditorTarget : TargetRules
{
    public MyGameEditorTarget(TargetInfo Target) : base(Target)
    {
        Type = TargetType.Editor;
        ExtraModuleNames.Add("MyGame");
    }
}
Server Target(服务器目标): 用于定义专门用于服务器端运行的构建目标,常用于多人游戏的专用服务器。


public class MyGameServerTarget : TargetRules
{
    public MyGameServerTarget(TargetInfo Target) : base(Target)
    {
        Type = TargetType.Server;
        ExtraModuleNames.Add("MyGame");
    }
}
Program Target(程序目标): 用于定义独立的工具或应用程序的构建配置,如插件、导出工具等。此类型通常用于非游戏逻辑的应用程序。


public class MyToolTarget : TargetRules
{
    public MyToolTarget(TargetInfo Target) : base(Target)
    {
        Type = TargetType.Program;
        ExtraModuleNames.Add("MyTool");
    }
}
常见的字段和设置
Type: 指定目标类型,如 TargetType.Game、TargetType.Editor 等。
ExtraModuleNames: 列出该目标需要的模块。
DefaultBuildSettings: 设定默认构建设置版本,如 BuildSettingsVersion.V2。
bCompileAgainstEngine: 指示是否编译引擎相关代码。
bCompileAgainstCoreUObject: 是否编译 CoreUObject 模块。
BuildEnvironment: 控制是否使用共享或独特的构建环境,如 TargetBuildEnvironment.Shared 或 Unique。
文件用途
.Target.cs 文件会在调用 UnrealBuildTool 编译项目时使用,以确定目标的构建过程及所需模块的具体配置。

### UE4 编译 C1060 错误解决方案 当在编译 Unreal Engine 4 (UE4) 项目时遇到 `fatal error C1060: compiler is out of heap space` 的错误,这通常是因为编译器(cl.exe)在编译过程中占用了过多的内存,超过了其可用的最大堆空间限制[^3]。以下是针对该问题的具体分析和解决办法: #### 修改编译器架构至64位 由于 cl.exe 默认使用的是 32 位版本,而 32 位程序所能使用的最大地址空间为 4GB,一旦超出这个范围就会导致进程崩溃并抛出 C1060 错误。可以通过切换到 64 位版本的 cl.exe 来缓解这一问题。 具体操作步骤如下: 1. 打开项目的 `.vcxproj` 文件。 2. 查找 `<PropertyGroup Label="Globals">` 节点。 3. 在该节点末尾新增一行属性配置: ```xml <PlatformToolset>v142</PlatformToolset> <PreferredToolArchitecture>x64</PreferredToolArchitecture> ``` 通过上述更改可以强制使用 64 位版的编译工具链,从而显著提升可用内存上限。 #### 减少全局变量或静态数据结构尺寸 如果项目中存在非常庞大的全局数组或者静态对象,则它们会在启动阶段就被分配固定的存储区域,进而消耗大量初始加载所需的 RAM 容量。建议重新评估这些设计决策,并考虑采用更灵活的方式替代——比如利用标准库容器类来实现动态扩展功能。 例如将原始声明形式替换为 STL 向量实例化方式: ```cpp // 原始写法可能导致过高的初始化成本 int largeArray[100000]; // 改进建议 std::vector<int> dynamicVector; dynamicVector.reserve(100000); ``` 这样不仅能够有效降低初期构建负担还能提高灵活性。 #### 预防性调整/Zm参数设定 尽管现代 Microsoft Visual Studio 已经改进了内部机制使得 /Zm 参数变得不那么必要,但在某些极端情况下仍然可能需要手动指定虚拟内存分区比例以进一步优化性能表现[^2]。可以在工程设置里添加额外命令行标志 `/Zm<number>` ,其中 number 表示相对于默认值的比例因子。 注意这种方法只是权宜之计并不能从根本上消除潜在隐患所以应该优先尝试其他手段后再决定是否启用它。 --- ### 总结 综上所述,对于 UE4 编译过程中的 C1060 错误主要可以从以下几个方面入手加以改善: - 切换到支持更大寻址能力的 64-bit 架构下的 CL.EXE; - 对于那些占用较多连续块状内存的大规模常驻型实体采取按需分配策略而非一次性全部预留出来; - 当前两者均不可行时再审慎运用 /ZM 开关调节相应阈值。 希望以上信息能帮助您成功克服所面临的技术挑战!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值