9.1 KiB
title, date, tags, rating
title | date | tags | rating |
---|---|---|---|
BuildGraph与UnrealBinaryBuilde | 2022-08-06 20:41:15 | BuildGraph | ⭐️⭐️ |
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来解决。
<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
文件删除。