BuildGraph 脚本元素
BuildGraph 脚本以 XML 编写。此文档包含 BuildGraph 脚本中的数据类型以及其整体结构。
元素
元素描述它们包含的数据,使它们成为 BuildGraph 脚本的基础构建块之一。下表包含作为元数据提供的项目,将在构建系统上运行时导出。在本地执行任务时它们不会被 BuildGraph 直接使用,将以 [META]
标记。
图表结构
一个 BuildGraph 脚本通常由以下元素定义:
<Node>
<Aggregate>
<Agent>
<Trigger>
节点
<Node>
是 BuildGraph 中执行的最小单位,拥有一套输入和输出。每个 <Node>
由按顺序执行的一个任务序列组成。
属性 | 类型 | 是否必需? | 描述 |
---|---|---|---|
Name | 命名 | 必需 | 节点名。 |
Requires | 目标列表 | 可选 | 由此节点需要执行的其他节点生成的节点列表、聚合,或标记文件集,由分号间隔。 |
Produces | 标记列表 | 可选 | 此节点向其他节点提供的标记文件集,由分号间隔。 |
After | 目标列表 | 可选 | 在此节点之前运行的节点列表,如他们为当前目标的部分(如非当前目标的部分,则无视)。由分号间隔。 |
NotifyOnWarnings | 布尔 | 可选 |
如为 false,此节点将不生成警告通知。只由构建系统使用。默认为 true 。[META]
|
If | 条件 | 可选 |
将被求值的条件。元素将被无视,除非条件求值为 true 。
|
聚合
<Aggregate>
声明一个命名聚合,可用作一套其他节点(或生成的标签集)的同义词。
属性 | 类型 | 是否必需? | 描述 | |
---|---|---|---|---|
Name | 命名 | 必需 | 聚合名。 | |
Requires | 目标列表 | 必需 | 此聚合的依赖性列表。可能是节点、标记的文件集,或代理群组。 | |
If | 条件 | 可选 |
将被求值的条件。元素将被无视,除非条件求值为 true 。
|
代理
<Agent>
定义按次序执行的节点上代理的要求(无需清理中间目录)。本地构建时将无视 <Agent>
要求,但必须被指定。
属性 | 类型 | 是否必需? | 描述 |
---|---|---|---|
Name | 命名 | 必需 | 群组名。 |
Type | 辨识符列表 | 可选 |
运行的代理类型。此字符串的含义由 host 构建系统所推断;它不含任何本质含义。[META]
|
If | 条件 | 可选 |
将被求值的条件。元素将被无视,除非条件求值为 true 。
|
触发
<Trigger>
的作用是图表部分(该图表只在显式用户介入后执行)的一个容器。如需在触发后执行节点,将 -Trigger=<Name>
传至命令行。
属性 | 类型 | 是否必需? | 描述 |
---|---|---|---|
Name | 命名 | 必需 | 触发名。 |
If | 条件 | 可选 |
将被求值的条件。元素将被无视,除非条件求值为 true 。
|
属性操作
BuildGraph 属性可通过以下元素进行修改:
<Property>
<Option>
<EnvVar>
属性
<Property>
设置属性的数值。如外部作用域中的属性已使用相同命名声明,<Property>
会将其覆盖。否则将在当前作用域中声明一个新属性。
属性 | 类型 | 是否必需? | 描述 |
---|---|---|---|
Name | 命名 | 必需 | 设置的属性名。 |
Value | 字符串 | 必需 | 属性的新值。 |
If | 条件 | 可选 |
将被求值的条件。元素将被无视,除非条件求值为 true 。
|
选项
<Option>
定义可从命令行进行设置的用户选项。<Option>
可能只出现在全局作用域。
属性 | 类型 | 是否必需? | 描述 |
---|---|---|---|
Name | 命名 | 必需 | 通过选项数值初始化的选项(和属性)名。 |
Description | 字符串 | 必需 | 通过 -ListOnly 参数运行 BuildGraph 时选项显示的描述。 |
Restrict | 正则表达式 | 可选 |
匹配此选项有效数值的正则表达式(如 [a-zA-Z]+ , true | false )。
|
DefaultValue | 字符串 | 必需 | 用户不进行显式设置时的选项默认值。 |
If | 条件 | 可选 |
将被求值的条件。元素将被无视,除非条件求值为 true 。
|
EnvVar
<EnvVar>
声明属性,以包含环境变量的内容(如未设置则为空白字符串)。
<EnvVar>
可能只出现在全局作用域。
属性 | 类型 | 是否必需? | 描述 |
---|---|---|---|
Name | Name | Required | 作为属性引入的环境变量名。 |
If | 条件 | 可选 |
将被求值的条件。元素将被无视,除非条件求值为 true 。
|
流动控制
可通过以下元素控制 BuildGraph 脚本的流动。
<Include>
<Do>
<Switch>
<ForEach>
包括
<Include>
处理其他 BuildGraph 脚本的内容,就像它存在出现在此文件中那样。
<Include>
可能只出现在全局作用域。
属性 | 类型 | 是否必需? | 描述 |
---|---|---|---|
Script | 字符串 | 必需 | 需要包含的脚本的路径(相对于当前脚本)。 |
If | 条件 | 可选 |
将被求值的条件。元素将被无视,除非条件求值为 true 。
|
Do
<Do>
将元素的序列分组,仅在条件求值为 true 时对它们进行处理。
属性 | 类型 | 是否必需? | 描述 |
---|---|---|---|
If | 条件 | 可选 |
将被求值的条件。元素将被无视,除非条件求值为 true 。
|
切换
<Switch>
与 C
切换语句相似,因其在分支序列上对条件求值,使用求值为 true 的条件处理首个语句。
<Switch>
语句示例:
<Switch>
<Case If=X>
<Elements go here>
</Case>
<Case If=Y>
<Elements go here>
</Case>
<Default>
<Elements go here>
</Default>
</Switch>
属性 | 类型 | 是否必需? | 描述 |
---|---|---|---|
If | 条件 | 可选 |
将被求值的条件。元素将被无视,除非条件求值为 true 。
|
ForEach
<ForEach>
通过在一个列表中指定到每个项目的给定属性(由分号间隔)来展开元素主体。
<ForEach>
语句示例:
<ForEach Name="Counter" Values="1;2;3;4;5">
<Log Message="Counter=$(Counter)"/>
</ForEach>
属性 | 类型 | 是否必需? | 描述 |
---|---|---|---|
Name | 命名 | 必需 | 指定到列表中每个数值的属性。 |
Values | 字符串列表 | 必需 | 数值列表,由分号间隔。 |
If | 条件 | 可选 |
将被求值的条件。元素将被无视,除非条件求值为 true 。
|
诊断
可通过以下元素对 BuildGraph 脚本执行诊断。
<Warning>
<Error>
警告
<Warning> 会在执行图表前输出警告消息。
可能包含在节点、代理、触发、或整体作用域中。如
属性 | 类型 | 是否必需? | 描述 |
---|---|---|---|
Message | 字符串 | 必需 | 被打印到日志的文本。 |
If | 条件 | 可选 |
将被求值的条件。元素将被无视,除非条件求值为 true 。
|
错误
<Error>
将输出错误消息。<Error>
可能包含在节点、代理、触发、或整体作用域中。如 <Error>
在被裁剪到被执行的目标后仍为图表的一部分,它将只提供一个输出。
属性 | 类型 | 是否必需? | 描述 |
---|---|---|---|
Message | 字符串 | 必需 | 被打印到日志的文本。 |
If | 条件 | 可选 |
将被求值的条件。元素将被无视,除非条件求值为 true 。
|
任务
通常而言,项目特定的实用脚本被实现为 AutomationTool BuildCommand 类。然而有时您需要为项目自动化自定义任务。这时 BuildGraph 便可提供协助。BuildGraph 可通过任意数量的任务进行延展,便于您用最符合自身需求的方式自定义构建自动化任务。以下部分将说明使用 BuildGraph 创建自定义任务的多种方式,包括预定义任务的列表,为创建自定义任务提供良好的起始点。
自定义任务
如需新建自定义任务,需实现一个派生自 CustomTask
类的类并对其应用 [TaskElement]
属性。TaskElement
构造函数拥有两个参数:其所代表的 XML 元素的命名、和包含其参数的类类型(将在加载时传至构造函数)。
如需从 XML 文件读取参数类域,将 [TaskParameter]
属性附加到任务。附加 TaskParameter
属性将说明形式参数为必须或可选,包括应被应用到实际参数的额外验证。
预定义任务
作为创建任务的起始点,我们提供各种预定义任务供您使用。如果需要上手使用的简单预定义任务,我们推荐将 LogTask
用作一个较好的起始点。如需了解 BuildGraph 的最新改良,请将此页设为书签,以下预定义任务列表将定期更新。
命令
调用一个 AutomationTool 子进程运行给定的命令。
Name | 字符串 | 必需 | 要执行的命令名 |
Arguments | 字符串 | 可选 | 传至命令的参数 |
MergeTelemetryWithPrefix | 字符串 | 可选 | 如为非空,将使用给定前缀指示来自命令的遥测合入此 UAT 示例的遥测。可能为一个空(非空)字符串。 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
Commandlet
生成编辑器运行一个 commandlet。
Name | 字符串 | 必需 | 执行的 commandlet 名 |
Project | 文件规范 | 可选 | 和编辑器一同运行的项目 |
Arguments | 字符串 | 可选 | 被传至 commandlet 的参数 |
EditorExe | 文件名 | 可选 | 使用的编辑器可执行文件。默认为当前平台的开发 UE4Editor 可执行文件。 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
编译
使用 UnrealBuildTool 编译目标。
Target | 字符串 | 必需 | 编译目标 |
Configuration | Unreal 目标配置 | 必需 | 要编译的配置 |
Platform | Unreal 目标平台 | 必需 | 编译针对的平台 |
Arguments | 字符串 | 可选 | UnrealBuildTool 的额外参数 |
Tag | 标记列表 | 可选 | 应用此标记,构建此任务的产品 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
Cook
为特定平台 cook 一套地图。
Project | 字符串 | 必需 | 需要 cook 的项目文件 |
Platform | 字符串 | 必需 | 目标 cook 平台(如 WindowsNoEditor) |
Maps | 字符串 | 可选 | 被 cook 的地图列表,由“+”字符间隔 |
Versioned | 布尔 | 可选 | 传至 cooker 的额外参数 |
Arguments | 字符串 | 可选 | 传至 cooker 的额外参数 |
Tag | 标记列表 | 可选 | 应用此标记,构建此任务的产品 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
复制
从一个目录复制文件到另一个目录。
Files | 文件规范 | 必需 | 文件规范列表,由分号间隔(如 .cpp;Engine/.../.bat);或者标记集的名称。相对路径基于 FromDir。 |
FromDir | 目录名 | 必需 | 进行复制的基础目录。 |
ToDir | 目录名 | 必需 | 复制的目标目录 |
Tag | 标记列表 | 可选 | 应用此标记,构建此任务的产品 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
CsCompile
编译 C# 项目文件及其依赖性。
Project | 字符串 | 必需 | 需要编译的 C# 项目文件。可指定多个项目文件,由分号间隔。 |
Configuration | 字符串 | 可选 | 进行编译的配置 |
Platform | 字符串 | 可选 | 进行编译的平台 |
Arguments | 字符串 | 可选 | 传至编译器的额外选项 |
EnumerateOnly | 布尔 | 可选 | 只列举构建产物,不对项目进行实际编译。 |
Tag | 标记列表 | 可选 | 应用此标记,构建此任务的产品 |
TagReferences | 标记列表 | 可选 | 应用到项目拥有的非私有引用的标记(即处于外部且未复制进输出 dir) |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
删除
删除一套文件。
Files | 文件规范 | 必需 | 文件规范列表,由分号间隔(如 .cpp;Engine/.../.bat);或者标记集的名称 |
DeleteEmptyDirectories | 布尔 | 可选 | 删除文件后是否删除空白目录。默认为 true。 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
日志
将消息(和其他可选诊断信息)打印至输出日志
Message | 字符串 | 可选 | 显示的消息 |
Files | 文件规范 | 可选 | 指定后,文件的给定列表将在给定消息后显示。 |
IncludeContents | 布尔 | 可选 | 指定后,将显示给定文件的内容。 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
PakFile
从给定的一套文件创建 APK 文件。
Files | 文件规范 | 必需 | 添加到 pak 文件的文件列表、通配符和标记集,由“;”隔开。 |
Output | 文件名 | 必需 | 输出的 PAK 文件 |
ResponseFile | 文件名 | 可选 | 响应文件(包含添加到 pak 文件的文件列表)的路径,无需对它们进行单独指定 |
RebaseDir | 目录名 | 可选 | 相对重建文件基数的目录。指定后,所列目录下的最短路径将用于每个文件。 |
Order | 文件名 | 可选 | 给出文件排序的脚本 |
Sign | 字符串 | 可选 | 此 pak 文件的加密键 |
Compress | 布尔 | 可选 | 是否压缩文件 |
Arguments | 字符串 | 可选 | 传至 UnrealPak 的额外参数 |
Tag | 标记列表 | 可选 | 应用此标记,构建此任务的产品 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
重命名
重命名文件或文件群组。
Files | 文件规范 | 必需 | 需要重命名的单个或多个文件 |
From | 目录名 | 可选 | 需要匹配的当前文件名或样式(如 *.txt)。不应包含路径分隔符。 |
To | 路径名 | 必需 | 文件的新命名。不应包含路径分隔符。 |
Tag | 标记列表 | 可选 | 应用到重命名文件的标记 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
SetVersion
通过给定版本信息更新本地版本文件 (Engine/Source/Runtime/Launch/Resources/Version.h, Engine/Build/Build.version 和 Engine/Source/Programs/DotNETCommon/Metadata.cs)。
Change | Int32 | 必需 | 在版本文件中设置的变更列表 |
CompatibleChange | Int32 | 可选 | 在版本文件中设置的引擎兼容变更列表 |
Branch | 字符串 | 必需 | 分支字符串 |
Build | 字符串 | 可选 | 构建版本字符串 |
Licensee | 布尔 | 可选 | 是否将 IS_LICENSEE_VERSION 标记设为 true |
SkipWrite | 布尔 | 可选 | 设置后,不要对文件进行实际写入 - 返回将被更新的版本文件即可。适用于本地构建。 |
Tag | 标记列表 | 可选 | 应用此标记,构建此任务的产品 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
签名
使用安装证书对一套可执行文件进行签名。
Files | 文件规范 | 必需 | 文件规范列表,由分号间隔(如 .cpp;Engine/.../.bat);或者标记集的名称 |
Tag | 标记列表 | 可选 | 应用此标记,构建此任务的产品 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
生成
生成一个外部可执行文件并等候其完成。
Exe | 文件名 | 必需 | 要生成的可执行文件 |
Arguments | 字符串 | 可选 | 新建处理的参数 |
ErrorLevel | Int32 | 可选 | 被认作错误的最小出口代码。 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
暂存
构建中列出的暂存文件接收到输出目录。
Project | 文件名 | 可选 | 此目标所属的项目 |
Target | 字符串 | 必需 | 要暂存的目标名 |
Platform | Unreal 目标平台 | 必需 | 要暂存的平台 |
Configuration | Unreal 目标配置 | 必需 | 要暂存的配置 |
Architecture | 字符串 | 可选 | 要暂存的架构 |
ToDir | 字符串 | 必需 | 暂存接收文件的目录 |
Overwrite | 布尔 | 可选 | 是否覆盖现有文件 |
Tag | 标记列表 | 可选 | 应用此标记,构建此任务的产品 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
剥离
从一套文件中剥离调试信息。
Platform | Unreal 目标平台 | 必需 | 剥离二进制的平台工具链 |
BaseDir | 目录名 | 可选 | 文件存储的目录 |
Files | 文件规范 | 必需 | 文件规范列表,由分号间隔(如 .cpp;Engine/.../.bat);或者标记集的名称 |
OutputDir | 目录名 | 必需 | 剥离文件的输出目录。默认为输入路径(覆盖输入文件)。 |
Tag | 标记列表 | 可选 | 应用此标记,构建此任务的产品 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
提交
新建一个变更列表并将一套文件提交到 Perforce 流送。
Description | 字符串 | 必需 | 已提交变更列表的描述 |
Files | 文件规范 | 必需 | 要提交的文件 |
FileType | 字符串 | 可选 | 提交文件的 Perforce 文件类型(如 binary+FS32) |
Workspace | 字符串 | 可选 | 工作区命名。指定后,将使用给定的流送和根目录提交文件。如否,将使用当前工作区。 |
Stream | 字符串 | 可选 | 工作区的流送,默认为当前流送。除非工作区属性也被指定,否则将被无视。 |
RootDir | 目录名 | 可选 | 流送的根目录。如未指定,则默认为当前的根目录。 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
标记
为给定的一套文件应用标记。列举“Files”参数给定的标记和文件规格可找到文件列表。与“Filter”参数不匹配的文件将从列表中移除,之后是由“Except”参数匹配的文件。
BaseDir | 目录名 | 可选 | 设置基础目录解决相对路径和样式之间的冲突。设置后,所有绝对样式(如 /Engine/Build/...)将被当作为与此路径相对的状态。如未设置,它们将被当作完全绝对。 |
Files | 文件规范 | 必需 | 使用的文件集,包括通配符和标记名,由分号间隔。设置后,解决相对于 BaseDir;如未设置,则相对于分支根目录。 |
Filter | 文件规范 | 可选 | 过滤文件列表的样式,包括标记名或通配符。设置后,可能包含应用至基础目录的样式。如未指定,则默认为所有文件。 |
Except | 文件规范 | 可选 | 需要从匹配列表中剔除的样式集。可能包含应用至基础目录的样式的标记名。 |
With | 标记列表 | 必需 | 要应用的标记名 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
TagReceipt
从 *.target 文件进行读取,分派哪些标记构建产品和/或运行时依赖性
Files | 文件规范 | 必需 | 读取的接收文件集(*.target),包括通配符和标记名,由分号间隔。 |
EngineDir | 目录名 | 可选 | 引擎文件夹路径,用于在接收文件中展开 $(EngineDir) 属性。当前工作区默认为引擎目录。 |
ProjectDir | 目录名 | 可选 | 项目文件夹路径,用于在接收文件中展开 $(ProjectDir) 属性。当前工作区默认为引擎目录。 |
BuildProducts | 布尔 | 可选 | 是否标记列于接收中的构建产品 |
BuildProductType | 字符串 | 可选 | 标记何种构建产品(查阅 TargetReceipt.cs - UnrealBuildTool.BuildProductType 中的有效值) |
RuntimeDependencies | 布尔 | 可选 | 是否标记列于接收中的运行时依赖性 |
StagedFileType | 字符串 | 可选 | 标记的运行时依赖性(查阅 TargetReceipt.cs - UnrealBuildTool.StagedFileType 中的有效值) |
PrecompiledBuildDependencies | 布尔 | 可选 | 是否标记列于接收中的预编译构建依赖性 |
PrecompiledRuntimeDependencies | 布尔 | 可选 | 是否标记列于接收中的预编译运行时依赖性 |
With | 标记列表 | 必需 | 要应用的标记名 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
解压
从 zip 档案包解压文件。
ZipFile | 文件名 | 必需 | 解压 zip 文件的路径 |
ToDir | 目录名 | 必需 | 解压文件的输出路径 |
Tag | 标记列表 | 可选 | 应用到解压文件的标签 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |
压缩
将文件压缩为一个 zip 档案包。
FromDir | 目录名 | 必需 | 读取压缩文件的目录 |
Files | 文件规范 | 可选 | 文件规范列表,由分号间隔(如 .cpp;Engine/.../.bat);或者标记集的名称。相对路径取自 FromDir。 |
ZipFile | 文件名 | 必需 | 要创建的 zip 文件 |
Tag | 标记列表 | 可选 | 应用到已创建 zip 文件的标记 |
If | 条件 | 可选 | 是否执行此任务。如该条件求值为 false,它将被无视。 |