模块 是 虚幻引擎(UE) 的构建块。引擎本质上就是众多模块组成的大规模集合,游戏则提供自己的模块来扩充这个集合。每个模块都封装了一组功能,并且可以提供公共接口和编译环境(包括宏、路径等)供其他模块使用。
模块通过C#源文件进行声明,这些文件的扩展名为 .build.cs ,存储在你的项目的 Source 目录下。属于某个模块的C++源代码与 .build.cs 文件并列存储,或者存储在它的子目录中。每个 .build.cs 文件都会声明一个从 ModuleRules 基类衍生而来的类,并设置属性来控制应如何从其构造函数进行构建。这些 .build.cs 文件都由 虚幻构建工具(UBT) 编译,用于确定整体编译环境。
.build.cs 文件的典型结构如下。
using UnrealBuildTool;
using System.Collections.Generic;
public class MyModule:ModuleRules
{
public MyModule(ReadOnlyTargetRules Target) : base(Target)
{
// 属性和设置放在此处
}
}
只读属性
$ IsPlugin (Boolean):如果插件包含此模块,则为true。
$ HasPackageOverride (Boolean):如果在此模块上指定了覆盖类型,则返回true。
$ AutoSdkDirectory (String):激活主机平台的AutoSDK目录。
$ EngineDirectory (String):当前引擎目录。
$ PluginDirectory (String):包含此插件的目录的属性。适合在添加第三方依赖项的路径时使用。
$ ModuleDirectory (String):包含此模块的目录的属性。适合在添加第三方依赖项的路径时使用。
$ TestsDirectory (String):返回模块的低级测试目录 Tests 。
$ IsVcPackageSupported (Boolean):返回构建配置是否支持VcPkg。
读写属性
$ 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配置中启用优化的情况下进行编译等)。根据创建它的规则程序集初始化为默认值。
$ bDeterministic (Boolean):为确定性编译设置标记(试验性,不一定得到完全支持)。确定性链接通过TargetRules控制。
$ bUseRTTI (Boolean):使用运行时类型信息。
$ bUseAVX (Boolean):指示编译器在支持的平台上使用SSE或AVXD固有属性的地方生成AVX指令。请注意,启用此属性会更改PC平台的最低配置要求,由此得到的可执行文件在不支持AVX的计算机上将会崩溃。
$ bEnableBufferSecurityChecks (Boolean):启用缓冲区安全检查。 此属性通常应启用,因为它可以防止严重的安全风险。
$ bEnableExceptions (Boolean):启用异常处理。
$ bEnableObjCExceptions (Boolean):启用Objective C异常处理
$ bEnableObjCAutomaticReferenceCounting (Boolean):启用Objective C自动引用计数(ARC)。如果将此属性设置为true,则你不应为此模块使用共享PCH。引擎短期内不会广泛采用ARC。不这样做将导致编译错误,因为共享PCH是使用与消费者不同的标记编译的。
$ bEnableUndefinedIdentifierWarnings (Boolean):启用在#if表达式中使用未定义辨识符发出警告
$ bDisableStaticAnalysis (Boolean):禁用所有静态分析——clang、msvc、pvs-studio。
$ bStaticAnalyzerExtensions (Boolean):启用使用EspXEngine插件的额外分析器扩展警告。此属性仅支持MSVC。请参阅https://learn.microsoft.com/en-us/cpp/code-quality/using-the-cpp-core-guidelines-checkers。默认情况下,此属性将添加大量警告。如果启用此属性,建议使用StaticAnalyzerRulesets。
$ StaticAnalyzerRulesets (HashSet
$ StaticAnalyzerCheckers (HashSetclang -Xclang -analyzer-checker-help 或:clang -Xclang -analyzer-checker-help-alpha ,查看试验性检查程序列表。
$ StaticAnalyzerDisabledCheckers (HashSetclang -Xclang -analyzer-checker-help 或:clang -Xclang -analyzer-checker-help-alpha ,查看试验性检查程序列表。
$ StaticAnalyzerAdditionalCheckers (HashSetclang -Xclang -analyzer-checker-help 或:clang -Xclang -analyzer-checker-help-alpha ,查看试验性检查程序列表。
$ bMergeUnityFiles (Boolean):是否合并模块和生成的Unity文件,以加快编译速度。
$ MinSourceFilesForUnityBuildOverride (Int32):为该模块激活Unity构建之前此模块中的源文件数量。 如果设为-1以外的值,将覆盖由 MinGameModuleSourceFilesForUnityBuild 控制的默认设置。
$ MinFilesUsingPrecompiledHeaderOverride (Int32):若不为零,则覆盖 BuildConfiguration.MinFilesUsingPrecompiledHeader 。
$ NumIncludedBytesPerUnityCPPOverride (Int32):若不为零,则覆盖 Target.NumIncludedBytesPerUnityCPP 。
$ bBuildLocallyWithSNDBS (Boolean):模块使用 #import ,因此在使用SN-DBS编译时,必须在本地编译。
$ bEnableNonInlinedGenCppWarnings (Boolean):启用匹配的手写 .cpp 文件中可能内联了 .gen.cpp 文件时发出警告
$ IsRedistributableOverride (Nullable
$ bLegalToDistributeObjectCode (Boolean):是否可以公开发布此模块的输出,即使它拥有不公开发布的模块的代码/依赖项(例如CarefullyRedist 、 NotForLicensees 、 NoRedist )也同样如此。当你计划发布二进制文件而非源时,应使用此属性。
$ AllowedRestrictedFolders (List
$ AliasRestrictedFolders (Dictionary
$ IWYUSupport (IWYUSupport):允许"include what you use"在运行时修改源代码。bEnforceIWYU 必须为true,此变量才有效。
$ bAddDefaultIncludePaths (Boolean):是否将所有默认包含路径都添加至该模块(例如 Source/Classes 文件夹、 Source/Public 下的子文件夹)。
$ bIgnoreUnresolvedSymbols (Boolean):是否忽略模块中的悬挂(即未解析的外部)符号。
$ bPrecompile (Boolean):是否应预编译此模块。默认为目标的bPrecompile标记。清除此标记可避免预编译该模块。
$ bUsePrecompiled (Boolean):此模块是否应该使用预编译数据。对从已安装的程序集创建的模块而言,始终为true。
$ bAllowConfidentialPlatformDefines (Boolean):该模块是否可以使用 PLATFORM_XXXX 样式进行定义,其中 XXXX 是保密的平台名称。此属性用于确保引擎或其他共享代码不会泄露 #if PLATFORM_XXXX 块内的机密信息。但被许可方游戏代码最好考虑到这种情况。
$ PublicIncludePathModuleNames (List
$ PublicDependencyModuleNames (List
$ PrivateIncludePathModuleNames (List
$ PrivateDependencyModuleNames (List
$ CircularlyReferencedDependentModules (List
$ PublicSystemIncludePaths (List
$ PublicIncludePaths (ListPublic 文件夹中发现所有文件)公开给其他模块的包含文件所有路径的列表。
$ InternalncludePaths (ListInternal 文件夹中发现所有文件)公开给其他内部模块的包含文件所有路径的列表。
$ PrivateIncludePaths (ListPrivate 路径,如果要避免相对路径,则会更多)
$ PublicSystemLibraryPaths (List.lib 文件的目录)——对于外部(第三方)模块,请改用 PublicAdditionalLibaries 。
$ PrivateRuntimeLibraryPaths (List.so 文件)。
$ PublicRuntimeLibraryPaths (List.so 文件)。
$ PublicAdditionalLibraries (List.lib 文件的名称,包括扩展名)——通常用于外部(第三方)模块。
$ DependenciesToSkipPerArchitecture (Dictionary
$ PublicPreBuildLibraries (ListTargetRules.PreBuildSteps 或 TargetRules.PreBuildTargets 的其他目标。
$ PublicSystemLibraries (List.lib 文件,请改用 PublicAdditionalLibraries 。
$ PublicFrameworks (List
$ PublicWeakFrameworks (List
$ PublicAdditionalFrameworks (List
$ AdditionalBundleResources (List
$ TypeLibraries (List
$ PublicDelayLoadDLLs (List
$ PrivateDefinitions (List
$ PublicDefinitions (List
$ DynamicallyLoadedModuleNames (List
$ RuntimeDependencies (RuntimeDependencyList):该模块在运行时依赖的文件列表。这些文件将与目标一同暂存。
$ AdditionalPropertiesForReceipt (ReceiptPropertyList):要添加到编译回执中的附加属性列表。
$ PrecompileForTargets (PrecompileTargetsType):应该针对哪些目标预编译此模块。
$ ExternalDependencies (List.Build.cs 文件进行解析。
$ SubclassRules (List
$ bRequiresImplementModule (NullableIMPLEMENT_MODULE 宏。大多数UE模块都有此需要,因为我们使用 IMPLEMENT_MODULE 宏来执行其他全局覆盖(例如运算符新建/删除向GMalloc的传递)。
$ bValidateCircularDependencies (Boolean):是否根据允许的循环模块依赖性列表验证循环依赖性会导致构建速度减慢。强烈反对禁用此选项。对于始终根据允许列表验证的引擎模块,将忽略此选项。
$ CppStandard (CppStandardVersion):使用哪个标准编译此模块。
$ CStandard (CStandardVersion):使用哪个标准编译此模块。
$ ModuleSymbolVisibility (SymbolVisibility):控制符号的可视性。
$ Name (String):此模块的名称。
$ OverridePackageType (PackageOverrideType):将设置不同程序包标记的模块的被覆盖类型。不能用于作为插件组成部分的模块,因为这已在 .uplugin 文件中设置。
$ OptimizeCode (CodeOptimization):应在何时优化此模块的代码。
$ PCHUsage (PCHUsageMode):此模块的预编译头文件用法
$ DefaultBuildSettings (BuildSettingsVersion):默认使用哪个引擎版本的构建设置。
$ IncludeOrderVersion (EngineIncludeOrderVersion):编译此模块时使用哪个版本的包含顺序。可在命令行中或在模块规则中使用-ForceIncludeOrder来覆盖。
$ ShadowVariableWarningLevel (WarningLevel):如何处理阴影变量警告。
$ UnsafeTypeCastWarningLevel (WarningLevel):如何处理不安全的隐式类型类型转换警告(例如,double转换为float或int64转换为int32)
$ bUseUnity (Boolean):如果启用了Unity构建,则可以使用此属性在此特定模块将使用Unity构建时进行覆盖。此属性使用 BuildConfiguration 中的每个模块配置进行设置。
$ bEnforceIWYU (Boolean):当 PCHUsage 设置为 ExplicitOrSharedPCH 时,强制执行"include what you use"规则;使用单块头文件( Engine.h 、 UnrealEd.h 等)时发出警告,并检查确认源文件先包含与其匹配的头文件。
$ bLegacyPublicIncludePaths (Boolean):此模块是否相对于其"Public"文件夹的根限定所包含的来自其他模块的头文件。这可以减少需要传递给编译器的搜索路径的数量,从而提高性能并缩短编译器命令行的长度。
$ bLegacyParentIncludePaths (Boolean):此模块是否相对于父目录限定所包含的来自其他模块的头文件。这可以减少需要传递给编译器的搜索路径的数量,从而提高性能并缩短编译器命令行的长度。