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`文件删除。
 | 
						||
 | 
						||
 |