Init
This commit is contained in:
110
03-UnrealEngine/流程管理与部署/BuildGraph与UnrealBinaryBuilde.md
Normal file
110
03-UnrealEngine/流程管理与部署/BuildGraph与UnrealBinaryBuilde.md
Normal file
@@ -0,0 +1,110 @@
|
||||
---
|
||||
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`文件删除。
|
||||
|
||||
|
Reference in New Issue
Block a user