虚幻编译工具支持数个目标类型的编译:
-
游戏——需要烘焙数据才能运行的standalone游戏。
-
客户端——与游戏相同,但不包含任何服务器代码。适用于联网游戏。
-
服务器——与游戏相同,但不包含任何客户端代码。适用于联网游戏中的专用服务器。
-
编辑器——扩展虚幻编辑器的目标。
-
程序——基于虚幻引擎打造的standalone工具程序。
目标是通过C#源文件声明的,扩展名为.target.cs,并存储在项目的 Source 目录下。每个.target.cs文件都声明一个类,从TargetRules基类衍生而来,并设置属性来控制如何从其构造函数进行编译。当要求编译目标时,虚幻编译工具将编译target.cs文件,并在其中构造类来确定其设置。
类的名称必须与在其中声明这个类的文件的名称相匹配,后跟“Target”(例如,MyProject.target.cs定义类“MyProjectTarget”)。
目标文件的典型结构如下:
using UnrealBuildTool;
using System.Collections.Generic;
public class MyProjectTarget :TargetRules
{
public MyProjectTarget(TargetInfo Target) : base(Target)
{
Type = TargetType.Game;
// 此处为其他属性
}
}
只读属性
$ Platform (UnrealTargetPlatform):编译此目标所针对的平台。
$ Configuration (UnrealTargetConfiguration):正在被编译的配置。
$ Architecture (String):编译此目标所针对的架构(默认为空字符串)。
$ ProjectFile (FileReference):包含此目标的项目文件路径。
$ Version (ReadOnlyBuildVersion):当前编译版本
读/写属性
$ Type (TargetType):目标类型。
$ bUsesSteam (Boolean):目标是否使用Steam。
$ bUsesCEF3 (Boolean):目标是否使用CEF3。
$ bUsesSlate (Boolean):项目是否使用可视Slate UI(与固定可用的低级视窗/消息传递相反)。
$ bUseStaticCRT (Boolean):强制与静态CRT链接。由于需要共享分配器实现(举例而言),并且TPS库彼此一致,所以此功能并非完全受整个引擎支持,但可用于实用程序。
$ bDebugBuildsActuallyUseDebugCRT (Boolean):启用调试版本的调试C++运行时(CRT)。默认始终使用发布运行时,因为调试虚幻引擎项目时调试版本并不十分实用,且链接到调试CRT库将强制使用调试CRT编译第三方库依赖项(执行速度通常较慢)。如果需要第三方静态库调试版本的单独副本才能调试程序代码,往往不甚便利。
$ bLegalToDistributeBinary (Boolean):此目标的输出是否可以公开发布,即使它在拥有特殊限制的文件夹中的模块上存在依赖性也同样如此(如CarefullyRedist、NotForLicensees、NoRedist)。
$ UndecoratedConfiguration (UnrealTargetConfiguration):指定二进制文件不需要“-Platform-Configuration”后缀的配置。
$ bBuildAllPlugins (Boolean):编译能找到的所有插件,即使未启用也不例外。这对于纯内容的项目尤为有用,在这些项目中编译的是UE4Editor目标,但通过启用插件的游戏运行它。
$ bBuildAllModules (Boolean):编译对该目标类型有效的所有模块。用于CIS和制作已安装的引擎版本。
$ BuildPlugins (List
$ AdditionalPlugins (List
$ EnablePlugins (List
$ DisablePlugins (List
$ PakSigningKeysFile (String):内嵌到可执行文件中的pak签名密钥集的路径。
$ SolutionDirectory (String):允许程序目标指定自身的解决方案文件夹路径。
$ bBuildInSolutionByDefault (Nullable
$ bShouldCompileAsDLL (Boolean):是否应将此目标编译为DLL。需要将LinkType设为TargetLinkType.Monolithic。
$ ExeBinariesSubFolder (String):放置可执行文件的子文件夹,相对于默认位置。
$ GeneratedCodeVersion (EGeneratedCodeVersion):允许目标模块覆盖UHT代码生成版本。
$ bEnableMeshEditor (Boolean):是否启用网格体编辑器。
$ bCompileChaos (Boolean):是否编译Chaos物理插件。
$ bUseChaos (Boolean):是否使用Chaos物理接口。这将覆盖physx标志,从而禁用APEX和NvCloth
$ bUseChaosChecked (Boolean): 是否在勾选的Chaos功能中编译,以用于调试。
$ bUseChaosMemoryTracking (Boolean): 是否在Chaos内存追踪功能中编译。
$ bCustomSceneQueryStructure (Boolean):场景查询加速是否由UE4完成。physx场景查询结构仍会被创建,但我们不会使用它。
$ bCompilePhysX (Boolean):是否包含PhysX支持。
$ bCompileAPEX (Boolean):是否包含PhysX APEX支持。
$ bCompileNvCloth (Boolean):是否包含NvCloth。
$ bCompileICU (Boolean):是否在Core中包含ICU unicode/i18n支持。
$ bCompileCEF3 (Boolean):是否编译CEF3支持。
$ bCompileISPC (Boolean): 是否用ISPC编译。
$ bForceBuildTargetPlatforms (Boolean):是否强制编译目标平台模块,即使其通常不会被编译也同样如此。
$ bForceBuildShaderFormats (Boolean):是否强制编译着色器格式模块,即使其通常不会被编译也同样如此。
$ bCompileCustomSQLitePlatform (Boolean):使用自定义“虚幻”平台(true)还是使用本机平台(false)编译SQLite。
$ bUseCacheFreedOSAllocs (Boolean):是否用MallocBinned来利用缓存释放的OS分配
$ bCompileAgainstEngine (Boolean):为包含引擎项目的所有版本启用。仅在编译只与Core连接的standalone应用程序时才会被禁用。
$ bCompileAgainstCoreUObject (Boolean):为包含CoreUObject项目的所有版本启用。仅在编译只与Core连接的standalone应用程序时才会被禁用。
$ bCompileAgainstApplicationCore (Boolean):为需要初始化ApplicationCore模块的版本启用。命令行工具通常不需要此属性。
$ bCompileRecast (Boolean):是否编译Recast寻路网格体生成。
$ bCompileNavmeshSegmentLinks (Boolean): 是否使用寻路网格体分段连接(navmesh segment link)进行编译。
$ bCompileNavmeshClusterLinks (Boolean): 是否使用寻路网格体群集连接(navmesh cluster link)进行编译。
$ bForceEnableExceptions (Boolean):启用所有模块的异常。
$ bUseInlining (Boolean):启用所有模块的内联。
$ bForceEnableObjCExceptions (Boolean):启用所有模块的异常。
$ bForceEnableRTTI (Boolean):启用所有模块的RTTI。
$ bCompileWithStatsWithoutEngine (Boolean):是否包含统计数据支持,即使没有引擎也不例外。
$ bCompileWithPluginSupport (Boolean):是否包含插件支持。
$ bCompileWithAccessibilitySupport (Boolean):是否在Slate和OS层中均允许访问代码。
$ bUseDebugLiveCodingConsole (Boolean):是否启用对实时编码的支持
$ bWithDirectXMath (Boolean): 是否启用对DirectX Math的支持。
$ bUseLoggingInShipping (Boolean):是否开启测试/发布版本的日志记录功能。
$ bLoggingToMemoryEnabled (Boolean):是否开启测试/发布版本的记录到内存功能。
$ bUseLauncherChecks (Boolean):是否检查进程是不是通过外部启动程序进行启动。
$ bUseChecksInShipping (Boolean):是否开启测试/发布版本的检查(断言)。
$ bUseEstimatedUtcNow (Boolean): 是否使用EstimatedUtcNow 或 PlatformUtcNow。某些情况下,PlatformUtcNow的速度会慢一些,这时适合使用EstimatedUtcNow。
$ bCompileFreeType (Boolean):如果需要FreeType支持,则设为True。
$ bCompileForSize (Boolean):如果优化大小重于优化速度,则设为True。
$ bForceCompileDevelopmentAutomationTests (Boolean):是否编译开发自动化测试。
$ bForceCompilePerformanceAutomationTests (Boolean):是否编译性能自动化测试。
$ bEventDrivenLoader (Boolean):如为true,将在烘焙版本中使用事件驱动加载程序。@todoio This needs to be replaced by a runtime solution after async loading refactor.
$ bUseXGEController (Boolean):XGE控制器工作程序和模块是否应包含在引擎版本本中。它们是已发布着色器编译(其使用XGE拦截接口)的必需内容。
$ bIWYU (Boolean):为此目标中的模块默认启用“包含您所使用”。将此项目中所有模块的默认PCH模式改为PCHUsageMode.UseExplicitOrSharedPCHs。
$ bEnforceIWYU (Boolean):执行“包含您所使用”规则,如果使用单块标头(Engine.h、UnrealEd.h等)则发出警告。并首先检查源代码是否包含匹配的标头。
$ bPrecompile (Boolean):将所有引擎模块的静态库设为此目标的中间物。
$ bEnableOSX109Support (Boolean):是否应使用OS X 10.9 Mavericks支持进行编译。用于需要与此版本的OS X兼容的某些工具。
$ bIsBuildingConsoleApplication (Boolean):如果正在编译的是控制台应用程序,则为true。
$ bDisableSymbolCache (Boolean):如果为某些平台缓存的调试符号不应被创建,则为True。
$ bUseUnityBuild (Boolean):是否将C++代码合并成更大的文件以加快编译速度。
$ bForceUnityBuild (Boolean):是否强制将C++源文件合并成更大的文件以加快编译。
$ bUseAdaptiveUnityBuild (Boolean):使用启发法确定当前在迭代的文件,并将其从unity blob中排除,使增量编译速度加快。当前的实现使用只读标签来区别工作集,假定文件将被源码管理系统设为可写入(如其正在被编辑)。Perforce如此,但Git并非如此。
$ bAdaptiveUnityDisablesOptimizations (Boolean):禁用自适应非统一工作集中文件的优化。
$ bAdaptiveUnityDisablesPCH (Boolean):禁用自适应非统一工作集中文件的强制包含PCH。
$ bAdaptiveUnityCreatesDedicatedPCH (Boolean):为工作集中的每个源文件创建专属PCH,从而加快对于纯cpp更改的迭代速度。
$ bAdaptiveUnityEnablesEditAndContinue (Boolean):为工作集中的每个源文件创建专属PCH,从而加快对于纯cpp更改的迭代速度。
$ MinGameModuleSourceFilesForUnityBuild (Int32):在统一编译之前,游戏模块中将为该模块激活的源文件的数量。此属性可缩短小型游戏模块的单个文件迭代编译时间,但完全重新编译的时间会变长。该设置可被模块的Build.cs文件中的bFasterWithoutUnity选项覆盖。
$ ShadowVariableWarningLevel (WarningLevel):强制阴影变量警告被视为支持平台上的错误。
$ UnsafeTypeCastWarningLevel (WarningLevel): 指定平台上不安全类型转换触发的警告/错误等级(例如double->float或int64->int32)。
$ bUndefinedIdentifierErrors (Boolean):强制将条件表达式中的未定义辨识符视为错误。
$ bUseFastMonoCalls (Boolean):新的单体图形驱动程序拥有可选的“快速调用”,取代各种D3d函数
$ bUseFastSemanticsRenderContexts (Boolean):新的Xbox驱动程序支持“快速语义”情境类型。针对即时和延迟情境启用。如果在Xbox RHI中发现渲染问题和/或崩溃,尝试将其禁用。
$ NumIncludedBytesPerUnityCPP (Int32):要包含在单个统一C++文件中的C++代码字节数大致数量。
$ bStressTestUnity (Boolean):是否将单个统一文件中的所有C++文件包含在项目中,以对C++ unity版本的健壮性进行压力测试。
$ bForceDebugInfo (Boolean):是否强制生成调试信息。
$ bDisableDebugInfo (Boolean):是否全局禁用调试信息生成;请参见DebugInfoHeuristics.cs了解每个配置和每个平台的选项。
$ bDisableDebugInfoForGeneratedCode (Boolean):是否对已生成文件禁用调试信息生成。这将缩短拥有大量已生成粘合代码的模块的链接时间。
$ bOmitPCDebugInfoInDevelopment (Boolean):是否在PC上的开发版本中禁用调试信息(可提高开发者迭代速度,因为调试信息禁用后链接速度极快)。
$ bUsePDBFiles (Boolean):是否应将PDB文件用于Visual C++版本。
$ bUsePCHFiles (Boolean):是否应使用PCH文件。
$ bPreprocessOnly (Boolean): 是否只为此目标预处理源文件,跳过编译。
$ MinFilesUsingPrecompiledHeader (Int32):在创建和使用前必须使用预编译标头的最小文件数。
$ bForcePrecompiledHeaderForGameModules (Boolean):启用后,将始终为游戏模块生成预编译标头,即使模块中只有少数源文件也不例外。这会极大缩短对项目中数个文件进行迭代更改的编译时间,但小型游戏项目的完全重新编译时间会变长。在模块的Build.cs文件中设置MinFilesUsingPrecompiledHeaderOverride即可覆盖此属性。
$ bUseIncrementalLinking (Boolean):是否使用增量链接。进行小更改时,增量链接可加快迭代速度。当前默认禁用,因为其在某些计算机上会导致错误(PDB相关编译错误)。
$ bAllowLTCG (Boolean):是否允许使用链接时间代码生成(LTCG)。
$ bPGOProfile (Boolean):是否在此版本中启用按配置优化(PGO)工具。
$ bPGOOptimize (Boolean):是否用PGO优化此版本。
$ bSupportEditAndContinue (Boolean):是否支持编辑并继续。仅可在Microsoft编译器上使用。
$ bOmitFramePointers (Boolean):是否忽略帧指针。对于PC上内存分析之类的操作,禁用该属性十分有用。
$ bUseMallocProfiler (Boolean):如为true,则在版本中启用内存分析(定义USE_MALLOC_PROFILER=1并强制设置bOmitFramePointers=false)。
$ bUseSharedPCHs (Boolean):启用“共享PCH”,该功能会尝试在UBT探测到包含某些PCH标头文件的模块之间共享这些PCH文件,从而大大加快编译速度。
$ bUseShippingPhysXLibraries (Boolean):如开发和发布版本应使用PhysX/APEX的发布配置,则为true。
$ bUseCheckedPhysXLibraries (Boolean):如开发和发布版本应使用PhysX/APEX的已校验配置,则为true。如bUseShippingPhysXLibraries为true,则此属性将被忽略。
$ bCheckLicenseViolations (Boolean):告知UBT检查当前正在编译的模块是否违反EULA。
$ bBreakBuildOnLicenseViolation (Boolean):如当前正在编译的模块违反EULA,则告知UBT中断编译。
$ bUseFastPDBLinking (Nullable
$ bCreateMapFile (Boolean):将地图文件作为版本的一部分进行输出。
$ bAllowRuntimeSymbolFiles (Boolean): 如果某些平台需要将生成运行时符号文件作为编译后步骤则为True。引擎使用这些文件解析日志中调用栈回溯的符号名。
$ BundleVersion (String):Mac应用程序捆绑版。
$ bDeployAfterCompile (Boolean):在需要部署的平台上编译后,是否部署可执行文件。
$ bAllowRemotelyCompiledPCHs (Boolean):启用后,允许XGE在远程机上编译预编译头文件。否则,PCH将始终在本地生成。
$ bCheckSystemHeadersForModification (Boolean):确定过时操作时,是否应检查系统路径中的标头有没有修改。
$ bDisableLinking (Boolean):是否禁用此目标的链接。
$ bFormalBuild (Boolean):表明这是用于发布的正式版本。如Build.version拥有变更列表集,此标志将自动设为true。当前绑定到此标志的唯一行为每个二进制文件单独编译默认资源文件,从而正确设置OriginalFilename字段。默认情况下,为减少编译时间,仅编译资源一次。
$ bFlushBuildDirOnRemoteMac (Boolean):编译前是否清理远程Mac上的版本目录。
$ bPrintToolChainTimingInfo (Boolean):是否写入来自编译器和链接器的详细时间信息。
$ bParseTimingInfoForTracing (Boolean):是否将时间数据解析到与chrome://tracing兼容的跟踪文件中。
$ bPublicSymbolsByDefault (Boolean):是否在POSIX平台上默认将所有符号设为公开
$ ToolChainName (String):允许覆盖要为此目标创建的工具链。这必须与虚幻编译工具程序集中声明的类名称匹配。
$ bDisableUnverifiedCertificates (Boolean):是否允许引擎配置确定能否加载未验证的证书。
$ bAllowGeneratedIniWhenCooked (Boolean):是否在烘焙后的版本中加载生成的ini文件(以任一方式加载的GameUserSettings.ini)
$ bAllowNonUFSIniWhenCooked (Boolean):是否在烘焙后的版本中加载非ufs ini文件(以任一方式加载的GameUserSettings.ini)
$ CppStandard (CppStandardVersion):用于编译此目标的C++标准
$ BuildVersion (String):版本字符串
$ GlobalDefinitions (List
$ ProjectDefinitions (List
$ ExportPublicHeader (String):指定要写入标头的路径,该标头包含此目标的公共定义。在编译要由外部编译进程使用的DLL时很有用。
$ ExtraModuleNames (List
$ ManifestFileNames (List
$ DependencyListFileNames (List
$ bOverrideBuildEnvironment (Boolean):是否忽略对共享编译环境的违反(如编辑器目标修改定义)
$ PreBuildTargets (List
$ PreBuildSteps (List
$ PostBuildSteps (List
$ AdditionalBuildProducts (List
$ AdditionalCompilerArguments (String):传递至编译器的附加参数
$ AdditionalLinkerArguments (String):传递至连接器的附加参数
$ DisableUnityBuildForModules (String[]): 禁用统一编译的模块列表。
$ EnableOptimizeCodeForModules (String[]): 启用优化的模块列表。
$ DisableOptimizeCodeForModules (String[]): 禁用优化的模块列表。
$ GeneratedProjectName (String):生成项目文件时,指定存在多个类型相同的目标时要使用的项目文件的名称。