查看: 689|回复: 9

[编程指南] 【虚幻引擎编译系统的目标文件 | Unreal Engine】

[复制链接]

1

主题

342

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
75866
发表于 2016-6-27 01:31:01 | 显示全部楼层 |阅读模式


本页面的内容:

      
目标文件的命名和路径

目标文件的内容
构造函数
设置二进制
设置全局环境

目标文件示例
     
虚幻引擎编译系统使用 Target 文件给 UnrealBuildTool 用于编译生成每个应用模块,制作动态规则模块。这些文件替换了以前较早时的 UEBuild*.cs 这样的文件,当时这些文件直接被编译在 UnrealBuildTool 的工具内。现在,每个目标文件定义了一个类,以供 UnrealBuildTool 来在编译的时候确认该模块是个游戏模块,还是一个应用工具模块。

UnrealBuildTool 现在是从 RulesModule.dll 中获取需要编译生成项目的正确的目标信息。

有两种目标类型:

Game - 这种类型的目标会利用“共享”的UE4 来执行。

Program - 这种类型的目标具有独立的可执行能力。ShaderCompileWorker,SlateViewer,以及 UnrealHeaderTool 就是这种类型。
目标文件的命名和路径
目标文件必须存在于一个程序的根资源详细内容或者游戏的 “Source” 资源详细内容的根资源详细内容中,并且必须被命名为 [APPNAME].Target.cs。

举个例子,ShaderCompileWorker 这个程序位于 \UE4\Engine\Source\Programs\ShaderCompileWorker,该路径下有文件 ShaderCompileWorker.Target.cs。

类似的,ExampleGame 的 Source 资源详细内容位于 UE4\ExampleGame\Source,其中应有文件 ExampleGame.Target.cs。
目标文件的内容
目标文件中,为每个游戏模块或者功能模块定义的类,都继承自 TargetRules(可以在 RulesCompiler.cs 文件中查到声明)。

该类的名字由当前这个游戏模块或者功能模块自身的名字加上 target 字样组合而成。比如,ShaderCompileWorker 的目标文件中的类名应该是 ShaderCompileWorkerTarget。这里必须要用 Target 作为结尾。这么做是为了避免和 *.Build.cs 文件中的那些类似规则的类名冲突,因为它们将会编译进同一个 DLL 文件中。

当需要从 Rules DLL 中编译某个目标时,UnrealBuildTool 会用 [APPNAME] 并附加 Target 的组合。继续用先前的例子,当 UnrealBuildTool 在处理 ShaderCompileWorker Win64 Development 传入的时候,会以 ShaderCompileWorkerTarget 作为 TargetRules 的类名来请求。

构造函数
构造函数中设定了该应用模块的资源文件名称以及类型。下面以 ExampleGameTarget 的构造函数来举例:

public ExampleGameTarget(TargetInfo Target){    Type = TargetType.Game;    Name = "ExampleGame";}
设置二进制
使用 TargetRules::SetupBinaries() 这个函数来生成 UEBuildBinaryConfiguration 的实例列表,UnrealBuildTool 将用该列表来填充 AppBinaries 数组(这是会生成的东西)。

设置全局环境
TargetRules::SetupGlobalEnvironment() 用于为 UnrealBuildTool 生成目标设置各种配置选项,也用于设置编译和链接使用的环境变量。

如果当前游戏并不包含这个函数的话,那就意味着是采用 UEBuildGame 类里面的默认实现。必要的话游戏可以通过实现这个函数来重载覆盖默认的设置。
目标文件示例
以下是 ShaderCompileWorker.Target.cs 的完整示例:

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.using UnrealBuildTool;using System.Collections.Generic;public class ShaderCompileWorkerTarget : TargetRules{    public ShaderCompileWorkerTarget(TargetInfo Target)    {
Type = TargetType.Program;
Name = "ShaderCompileWorker";    }    //    // TargetRules interface.    //    public override void SetupBinaries(
TargetInfo Target,
ref ListUEBuildBinaryConfiguration OutBuildBinaryConfigurations,
ref Liststring OutExtraModuleNames
)    {
Liststring LinkModules = new Liststring() { "Core", "ShaderCore", "RenderCore", "RHI", "WindowsTools", "ShaderCompileWorker" };
OutBuildBinaryConfigurations.Add(
     new UEBuildBinaryConfiguration( InType: UEBuildBinaryType.Executable,
  InModuleNames: LinkModules )
     );    }    public override void SetupGlobalEnvironment(
TargetInfo Target,
ref LinkEnvironmentConfiguration OutLinkEnvironmentConfiguration,
ref CPPEnvironmentConfiguration OutCPPEnvironmentConfiguration
)    {
// Turn off various third party features we don't need
UEBuildConfiguration.bAllowSteamworks = false;
UEBuildConfiguration.bAllowLive = false;
UEBuildConfiguration.bCompilePerforce = false;
// Currently we force Lean and Mean mode
UEBuildConfiguration.bCompileLeanAndMeanUE = true;
// Currently this app is not linking against the engine, so we'll compile out references from Core to the rest of the engine
UEBuildConfiguration.bCompileAgainstEngine = false;
// ShaderCompileWorker is a console application, not a Windows app (sets entry point to main(), instead of WinMain())
OutLinkEnvironmentConfiguration.bIsBuildingConsoleApplication = true;
// Disable logging, as the workers are spawned often and logging will just slow them down
OutCPPEnvironmentConfiguration.Definitions.Add("ALLOW_LOG_FILE=0");
OutCPPEnvironmentConfiguration.Definitions.Add("HACK_HEADER_GENERATOR=1");
OutCPPEnvironmentConfiguration.Definitions.Add("HACK_SHADER_COMPILER_WORKER=1");    }}
回复

使用道具 举报

0

主题

857

帖子

2816

积分

vip会员

Rank: 1

积分
2816
发表于 2016-7-2 19:52:03 | 显示全部楼层
不错的资源啊,可以研究研究
回复 支持 反对

使用道具 举报

0

主题

789

帖子

2612

积分

vip会员

Rank: 1

积分
2612
发表于 2016-7-4 02:13:02 来自手机 | 显示全部楼层
搬运工 辛苦了
回复 支持 反对

使用道具 举报

0

主题

895

帖子

2973

积分

vip会员

Rank: 1

积分
2973
发表于 2016-7-4 11:57:34 来自手机 | 显示全部楼层
好吗
回复 支持 反对

使用道具 举报

0

主题

884

帖子

2925

积分

vip会员

Rank: 1

积分
2925
发表于 2016-7-5 05:56:08 来自手机 | 显示全部楼层
论坛的好东西真多啊,相信版主放的东西都靠谱,就是希望价格便宜点啦。
回复 支持 反对

使用道具 举报

0

主题

856

帖子

2811

积分

vip会员

Rank: 1

积分
2811
发表于 2016-7-14 06:40:01 | 显示全部楼层
不会又要钱吧
回复 支持 反对

使用道具 举报

0

主题

836

帖子

2789

积分

vip会员

Rank: 1

积分
2789
发表于 2016-7-14 17:12:43 | 显示全部楼层
我知道楼主一向黑~~~~~
回复 支持 反对

使用道具 举报

0

主题

913

帖子

3036

积分

vip会员

Rank: 1

积分
3036
发表于 2016-7-17 18:24:08 来自手机 | 显示全部楼层
哈哈哈好大呀
回复 支持 反对

使用道具 举报

0

主题

1249

帖子

4017

积分

vip会员

Rank: 1

积分
4017
发表于 2016-7-19 07:04:53 | 显示全部楼层
这个不会又是超级贵吧.
回复 支持 反对

使用道具 举报

0

主题

864

帖子

2821

积分

vip会员

Rank: 1

积分
2821
发表于 2016-7-20 20:39:39 来自手机 | 显示全部楼层
一下这么多新发的好东东,谢谢分享
回复 支持 反对

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部