111 lines
9.1 KiB
Markdown
111 lines
9.1 KiB
Markdown
|
---
|
|||
|
title: BuildGraph与UnrealBinaryBuilde
|
|||
|
date: 2022-08-06 20:41:15
|
|||
|
tags: BuildGraph
|
|||
|
rating: ⭐️⭐️
|
|||
|
---
|
|||
|
|
|||
|
## BuildGraph
|
|||
|
- 共享共同的构建步骤,以节约构建时间
|
|||
|
- 能使用Graph对编译量进行优化
|
|||
|
- 易于并行化构建
|
|||
|
- 存储构建脚本在每个分支中,而不需要编写额外的后端程序
|
|||
|
- 不同的产品可以定制不同的额外步骤
|
|||
|
|
|||
|
基于以上的需求,EPIC的开发了BuildGraph,类似于Make/Ant/MSBuild,但一开始就是基于并行分布式处理设计的。各种操作定义在AutomationTool中,可以通过派生CustomTask类来扩展构建任务。
|
|||
|
文档:https://docs.unrealengine.com/4.27/en-US/ProductionPipelines/BuildTools/AutomationTool/BuildGraph/
|
|||
|
|
|||
|
本人推荐看查利鹏的文章《BuildGraph:构建支持多平台打包的二进制引擎》https://imzlp.com/posts/11956/,里面除了介绍了基础用法之外还介绍了加快构建的方法(如何砍掉不必要的构建过程)以及构建安卓与IOS端的方法。
|
|||
|
|
|||
|
官方视频也有对它进行介绍(10:17分开始):
|
|||
|
《Tools and Infrastructure for Large Teams | Unreal Dev Days 2019 | Unreal Engine》
|
|||
|
https://youtu.be/d6lyAI4Ftkw
|
|||
|
|
|||
|
视频中还介绍了:
|
|||
|
- EPIC的自动合并工具RoboMerge,源码位于Engine\Extras\RoboMerge。
|
|||
|
- 同步工作区工具BuildAgent,源码位于Engine\Source\Programs\BuildAgent。
|
|||
|
- AutoSDK,源码位于Engine\Extras\AutoSDK。
|
|||
|
- UnrealGameSync,源码位于Engine\Source\Programs\UnrealGameSync。
|
|||
|
|
|||
|
PS.BuildAgent与UnrealGameSync基于perforce。
|
|||
|
|
|||
|
分布式流程逻辑:
|
|||
|

|
|||
|
|
|||
|
## 插件构建命令
|
|||
|
>Engine\Build\BatchFiles\RunUAT.bat BuildPlugin -Plugin=[Path to .uplugin file, must be outside engine directory] -Package=[Output directory] -Rocket -VS2019
|
|||
|
|
|||
|
`D:\UnrealEngine\UnrealEngine\Engine\Build\BatchFiles\RunUAT.bat BuildPlugin -Plugin=C:\Users\BlueRose\Desktop\YueHuaProject\Plugins\MultiDraw\MultiDraw.uplugin -Package=C:\Users\BlueRose\Desktop\Ouput\plugins -Rocket -VS2019 -TargetPlatforms=Win64`
|
|||
|
|
|||
|
## 引擎构建命令
|
|||
|
`D:\UnrealEngine\UnrealEngine\Engine\Build\BatchFiles\RunUAT.bat BuildGraph -target="Make Installed Build Win64" -script=Engine/Build/InstalledEngineBuild.xml -set:WithDDC=true -set:SignExecutables=false -set:EmbedSrcSrvInfo=false -set:GameConfigurations=Development;Shipping -set:WithFullDebugInfo=false -set:HostPlatformEditorOnly=false -set:AnalyticsTypeOverride= -set:HostPlatformDDCOnly=true -set:WithWin64=true -set:WithMac=false -set:WithAndroid=false -set:WithIOS=false -set:WithTVOS=false -set:WithLinux=false -set:WithLumin=false -set:WithLinuxArm64=false -set:CompileDatasmithPlugins=false -set:WithServer=false -set:WithClient=false -set:WithHoloLens=false`
|
|||
|
|
|||
|
## AutomationTool其他命令
|
|||
|
具体可以参考:https://github.com/botman99/ue4-unreal-automation-tool
|
|||
|
```
|
|||
|
AnalyzeThirdPartyLibs CleanDevices RebasePublicIncludePaths TestKillAll
|
|||
|
BenchmarkBuild CleanFormalBuilds RebuildHLOD TestLog
|
|||
|
BenchmarkOptions CleanTempStorage RebuildLightMaps TestMacZip
|
|||
|
BlameKeyword CodeSurgery RecordPerformance TestMcpConfigs
|
|||
|
Build CopySharedCookedBuild ReplaceAssetsUsingManifest TestMessage
|
|||
|
BuildCMakeLib CopyUAT ResavePackages TestOSSCommands
|
|||
|
BuildCommonTools CryptoKeys ResavePluginDescriptors TestP4_ClientOps
|
|||
|
BuildCookRun DebugSleep ResaveProjectDescriptors TestP4_CreateChangelist
|
|||
|
BuildDerivedDataCache DumpBranch RunEditorTests TestP4_Info
|
|||
|
BuildEditor ExportIPAFromArchive RunP4Reconcile TestP4_LabelDescription
|
|||
|
BuildForUGS ExportMcpTemplates RunUnreal TestP4_StrandCheckout
|
|||
|
BuildGame ExtractPaks StashTarget TestRecursion
|
|||
|
BuildGraph FinalizeInstalledBuild SubmitUtilizationReportToEC TestRecursionAuto
|
|||
|
BuildHlslcc FixPerforceCase SyncBinariesFromUGS TestStopProcess
|
|||
|
BuildPhysX FixupRedirects SyncDDC TestSuccess
|
|||
|
BuildPlugin GenerateAutomationProject SyncDepotPath TestTestFarm
|
|||
|
BuildServer GenerateDSYM SyncProject TestThreadedCopyFiles
|
|||
|
BuildTarget GitPullRequest SyncSource TestUATBuildProducts
|
|||
|
BuildThirdPartyLibs IPhonePackager TempStorageTests UBT
|
|||
|
CheckBalancedMacros ListMobileDevices TestArguments UE4BuildUtilDummyBuildCommand
|
|||
|
CheckCsprojDotNetVersion ListThirdPartySoftware TestBlame UnstashTarget
|
|||
|
CheckForHacks Localise TestChangeFileType UpdateLocalVersion
|
|||
|
CheckPerforceCase Localize TestChanges UploadDDCToAWS
|
|||
|
CheckRestrictedFolders LookForOverlappingBuildProducts TestCleanFormalBuilds WriteIniValueToPlist
|
|||
|
CheckTargetExists MegaXGE TestCombinePaths ZipProjectUp
|
|||
|
CheckXcodeVersion OpenEditor TestFail ZipUtils
|
|||
|
CleanAutomationReports P4WriteConfig TestFileUtility
|
|||
|
CleanDDC ParseMsvcTimingInfo TestGauntlet
|
|||
|
```
|
|||
|
|
|||
|
## UnrealBinaryBuilder
|
|||
|
使用BuildGraph需要使用命令行,对开发者还是不够友好,所以可以使用UnrealBinaryBuilder:https://github.com/ryanjon2040/Unreal-Binary-Builder 这个项目使用c#编写,代码相对比较简单,可以参考用于公司内部的CI/CD工具以及分布式构建系统编写(如何与BuildGraph交互与通信)。查看源码后发现已经对应UE5进行了适配,所以可以放心使用。
|
|||
|
|
|||
|
一开始进入的是界面。如果是刚下载的源代码可以点击Start来下载二进制文件、生成引擎解决方案文件以及构建AutomationTool。
|
|||
|

|
|||
|
|
|||
|
之后点击Compile选项卡来设置构建选项。左边的Platform选择要构建的平台,其中Mac、Ios、Android可以参考查利鹏的文章。其中构建需要能够打开的引擎需要勾选的include DDC与Host DDC Only,不然运行引擎会提示丢失各种Shader与Shader文件夹。左下角的输入栏可以指定编译的版本,默认是Development与Shipping。点击Copy Commandline To Clipboard,会将生成的命令行复制到剪贴板,之后可以粘贴到文字编辑工具中查看,来确定所有的编译参数是否正确,也可以之后在cmd中直接运行这个命令来执行编译。最后点击Build UnrealEngine来进行构建。
|
|||
|

|
|||
|
|
|||
|
实际的编译时间比你手动编译的要长,是因为默认的BuildGraph构建文件**Engine/Build/InstalledEngineBuild.xml**中会有编译所有模块的指令。这里可以根据需求来创建新的BuildGraph文件去掉 -allmodules与-nolink来解决。
|
|||
|
```xml
|
|||
|
<Node Name="Compile UE4Game Win64" Requires="Compile UnrealHeaderTool Win64" Produces="#UE4Game Win64;#UE4Game Win64 Unstripped;#UE4Game Win64 Stripped;#UE4Game Win64 Unsigned;#UE4Game Win64 Signed">
|
|||
|
<ForEach Name="Target" Values="UE4Game;$(OptionalClientTarget);$(OptionalServerTarget)">
|
|||
|
<ForEach Name="Configuration" Values="$(GameConfigurations)">
|
|||
|
<Compile Target="$(Target)" Platform="Win64" Configuration="$(Configuration)" Tag="#UE4Game Win64" Arguments="-precompile -allmodules -nolink $(VSCompilerArg) $(TargetDebugInfoArg)"/>
|
|||
|
<Compile Target="$(Target)" Platform="Win64" Configuration="$(Configuration)" Tag="#UE4Game Win64" Arguments="-precompile $(VSCompilerArg) $(TargetDebugInfoArg)" Clean="false"/>
|
|||
|
</ForEach>
|
|||
|
</ForEach>
|
|||
|
</Node>
|
|||
|
```
|
|||
|
|
|||
|
在Zip Build选项卡中,你可以设置是否在编译完成后使用zip将引擎打包,推荐勾选FeaturePacks、Samples、Templates,不然新建项目与Level中的选项将会失效。如果用户需要debug那就需要勾选PDB与DEBUG。
|
|||
|

|
|||
|
|
|||
|
### “missing PDBCopy”问题解决
|
|||
|
构建的时候会遇到一个“missing PDBCopy”的问题。需要下载Win10 SDK安装Debugging Tools for Windows。下载地址:
|
|||
|
https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk
|
|||
|
|
|||
|
只需要勾选**Debugging Tools for Windows**并安装即可解决问题。
|
|||
|

|
|||
|
|
|||
|
## 构建无源码版本
|
|||
|
编译是需要所有的头文件的。所以使用默认设置,并在打包Zip时勾选`Source`,最后再解压把所有`*.cpp`文件删除。
|
|||
|
|
|||
|
|