模块是UE4的构建块。引擎是以大量模块的集合形式实现的,游戏提供自己的模块来扩充自己。每个模块都封装了一组功能,并且可以提供公共接口和编译环境(包括宏、路径等)供其他模块使用。
模块是通过C#源文件声明的,扩展名为.build.cs,存储在项目的 源(Source) 目录下。属于一个模块的C++源代码与.build.cs文件并列存储,或者存储在它的子目录中。每个.build.cs文件都声明一个类,从ModuleRules基类衍生而来,并设置属性来控制如何从其构造函数进行构建。这些.build.cs文件都由UnrealBuildTool编译,并被构造来确定整个编译环境。
.build.cs文件的典型结构如下。
using UnrealBuildTool;
using System.Collections.Generic;
public class MyModule : ModuleRules
{
public MyModule(ReadOnlyTargetRules Target) : base(Target)
{
// Settings go here
}
}
读/写属性
$ Type (ModuleType):模块的类型
$ BinariesSubFolder (String):Binaries/PLATFORM文件夹的子文件夹,用于在编译DLL时放入此模块。该文件夹仅供通过搜索找到的模块使用,如TargetPlatform或ShaderFormat模块。如果未使用FindModules进行查找定位,将不会找到该模块。
$ PrivatePCHHeaderFile (String):该模块的显式私有PCH。意味着该模块将不会使用共享的PCH。
$ SharedPCHHeaderFile (String):该模块提供的共享PCH的标头文件名。必须为公共C++标头文件的有效相对路径。此设置应该仅应用于那些被大量其它C++模块包含的标头文件。
$ ShortName (String):为该模块的中间目录和中间文件指定一个替代名称。路径长度达到上限时,此功能非常实用。
$ bTreatAsEngineModule (Boolean):是否应将此模块视为引擎模块(例如,使用引擎定义、PCH、以DebugGame配置中启用的优化进行编译等……)。根据创建它的规则程序集初始化为默认值。
$ bUseRTTI (Boolean):使用运行时类型信息
$ bUseAVX (Boolean): 指示编译器在支持的平台上,在使用SSE或AVXD内联函数的地方生成AVX指令。注意,启用此项后,会修改PC平台的minspec,由此得到的可执行文件在不支持AVX的计算机上将会崩溃。
$ bEnableBufferSecurityChecks (Boolean):启用缓冲区安全检查。通常应启用,因为它可以防止严重的安全风险。
$ bEnableExceptions (Boolean):启用异常处理
$ bEnableObjCExceptions (Boolean):启用Objective C异常处理
$ bEnableUndefinedIdentifierWarnings (Boolean):启用#if表达式中使用未定义辨识符的警告
$ MinSourceFilesForUnityBuildOverride (Int32):在统一编译之前,该模块中将为该模块激活的源文件的数量。如果设为-1以外的任何值,将覆盖由MinGameModuleSourceFilesForUnityBuild控制的默认设置
$ MinFilesUsingPrecompiledHeaderOverride (Int32):若不为零,则覆盖BuildConfiguration.MinFilesUsingPrecompiledHeader。
$ bBuildLocallyWithSNDBS (Boolean):模块使用#import,因此在使用SN-DBS进行编译时必须在本地编译
$ IsRedistributableOverride (Nullable
$ bLegalToDistributeObjectCode (Boolean):是否可以公开分发此模块的输出,即使它拥有不公开的模块(即CarefullyRedist, NotForLicensees, NoRedist)的代码/依赖性也同样如此。要发布二进制文件而非源时,应使用此功能。
$ WhitelistRestrictedFolders (List
$ AliasRestrictedFolders (Dictionary
$ bEnforceIWYU (Boolean):当PCHUsage设为ExplicitOrSharedPCH时,强制执行“包含你使用的内容”规则;使用单块标头(Engine.h,、UnrealEd.h,等)时发出警告,并首先检查源文件是否包括它们匹配的标头。
$ bAddDefaultIncludePaths (Boolean):是否将所有默认包含路径添加至该模块(如Source/Classes文件夹、Source/Public下的子文件夹)。
$ bIgnoreUnresolvedSymbols (Boolean):是否忽略模块中的悬挂(即未解析的外部)符号
$ bPrecompile (Boolean):是否应预编译此模块。默认为目标的bPrecompile标记。清除此标记即可避免预编译该模块。
$ bUsePrecompiled (Boolean):此模块是否应该使用预编译数据。对从已安装的程序集创建的模块而言,始终为true。
$ bAllowConfidentialPlatformDefines (Boolean):该模块是否可以使用PLATFORM_XXXX风格进行定义,其中XXXX是保密的平台名称。这可以用来确保引擎或其他共享代码不会泄露#if PLATFORM_XXXX块内的机密信息。然而,接受许可的一方可能想要获得这些代码。注意:这是对未来的展望,以前的保密平台(如PS4)不太可能受到限制
$ PublicIncludePathModuleNames (List
$ PublicDependencyModuleNames (List
$ PrivateIncludePathModuleNames (List
$ PrivateDependencyModuleNames (List
$ CircularlyReferencedDependentModules (List
$ PublicSystemIncludePaths (List
$ PublicIncludePaths (List
$ PrivateIncludePaths (List
$ PublicSystemLibraryPaths (List
$ PrivateRuntimeLibraryPaths (List
$ PublicRuntimeLibraryPaths (List
$ PublicAdditionalLibraries (List
$ PublicPreBuildLibraries (List
$ PublicSystemLibraries (List
$ PublicFrameworks (List
$ PublicWeakFrameworks (List
$ PublicAdditionalFrameworks (List
$ AdditionalBundleResources (List
$ TypeLibraries (List
$ PublicAdditionalShadowFiles (List
$ PublicDelayLoadDLLs (List
$ PrivateDefinitions (List
$ PublicDefinitions (List
$ DynamicallyLoadedModuleNames (List
$ RuntimeDependencies (RuntimeDependencyList):该模块在运行时依赖的文件列表。这些文件将与目标一同暂存。
$ AdditionalPropertiesForReceipt (ReceiptPropertyList):要添加到编译接收中的附加属性列表
$ PrecompileForTargets (PrecompileTargetsType):应该针对哪个目标对此模块进行预编译
$ ExternalDependencies (List
$ AdditionalCodeGenDirectories (List
$ SubclassRules (List
$ bRequiresImplementModule (Nullable
$ CppStandard (CppStandardVersion):用于编译此模块的标准。
$ ModuleSymbolVisibility (SymbolVisibility):控制符号的可视性