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