模块 是 虚幻引擎(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。
$ Logger (ILogger): 目标记录器的访问器。
$ 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配置中启用优化的情况下进行编译等)。根据创建它的规则程序集初始化为默认值。
$ bUseRTTI (Boolean): 使用运行时类型信息。
$ bCodeCoverage (Boolean): 启用代码覆盖编译/链接支持。
$ MinCpuArchX64 (Nullable
$ bEnableBufferSecurityChecks (Boolean): 启用缓冲区安全检查。 此属性通常应启用,因为它可以防止严重的安全风险。
$ bEnableExceptions (Boolean): 启用异常处理。
$ bEnableObjCExceptions (Boolean): 启用Objective C异常处理。
$ bEnableObjCAutomaticReferenceCounting (Boolean): 启用Objective C自动引用计数(ARC)。如果将此属性设置为true,则你不应为此模块使用共享PCH。引擎短期内不会广泛采用ARC。不这样做将导致编译错误,因为共享PCH是使用与消费者不同的标记编译的。
$ bWarningsAsErrors (Boolean): 是否将全部警告作为错误启用。UE已经将大多数警告作为错误启用,但禁用了一些警告(例如废弃警告)。
$ bEnableUndefinedIdentifierWarnings (Boolean): 启用在 #if 表达式中使用未定义辨识符发出警告
$ bDisableStaticAnalysis (Boolean): 禁用所有静态分析 - clang、msvc、pvs-studio。
$ bStaticAnalyzerExtensions (Boolean): 启用使用EspXEngine插件的额外分析器扩展警告。此属性仅支持MSVC。请参阅使用C++ Core Guidelines检查器,了解详情。默认情况下,此属性将添加大量警告。如果启用此属性,建议使用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 块内的机密信息。但被许可方游戏代码最好考虑到这种情况。
$ bAllowAutoRTFMInstrumentation (Boolean): 仅当启用AutoRTFMCompiler时,才启用对此模块的AutoRTFM工具。
$ PublicIncludePathModuleNames (List
$ PublicDependencyModuleNames (List
$ PrivateIncludePathModuleNames (List
$ PrivateDependencyModuleNames (List
$ CircularlyReferencedDependentModules (List
$ PublicSystemIncludePaths (List
$ PublicIncludePaths (List
$ InternalncludePaths (List
$ PrivateIncludePaths (List
$ PublicSystemLibraryPaths (List.lib 文件的目录),对于外部(第三方)模块,请改用PublicAdditionalLibaries。
$ PrivateRuntimeLibraryPaths (List.so 文件)。
$ PublicRuntimeLibraryPaths (List.so 文件)
$ PublicAdditionalLibraries (List
$ DependenciesToSkipPerArchitecture (Dictionary
$ PublicPreBuildLibraries (List.lib 文件的名称,包括扩展名),通常用于仍会构建但使用TargetRules.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 (Nullable
$ CStandard (Nullable
$ GenerateHeaderFuncs (List
$ ModuleSymbolVisibility (SymbolVisibility): 控制符号的可视性。
$ Name (String): 此模块的名称。
$ OverridePackageType (PackageOverrideType): 将设置不同程序包标记的模块的被覆盖类型。不能用于作为插件组成部分的模块,因为这已在 .uplugin 文件中设置。
$ OptimizeCode (CodeOptimization): 应在何时优化此模块的代码。
$ OptimizationLevel (OptimizationMode): 允许微调优化级别,以提高速度和/或减小代码大小。这需要私有PCH(或NoPCHs,但不推荐)。
$ PCHUsage (PCHUsageMode): 此模块的预先编译头文件用法。
$ DefaultBuildSettings (BuildSettingsVersion): 默认情况下要使用哪个引擎版本的构建设置。
$ IncludeOrderVersion (EngineIncludeOrderVersion): 编译此模块时使用哪个版本的包含顺序。可在命令行中或在模块规则中使用 -ForceIncludeOrder 来覆盖。
$ bUseAVX (Boolean): 已废弃:指示编译器在支持的平台上使用SSE或AVXD固有属性的地方生成AVX指令。请注意,启用此属性会更改PC平台的最低配置要求,由此得到的可执行文件在不支持AVX的计算机上将会崩溃。
$ DeterministicWarningLevel (WarningLevel): 如何处理确定性警告(试验性)。
$ ShadowVariableWarningLevel (WarningLevel): 如何处理阴影变量警告。
$ UnsafeTypeCastWarningLevel (WarningLevel): 如何处理不安全的隐式类型转换警告(例如,double转换为float或int64转换为int32)
$ ModuleIncludePathWarningLevel (WarningLevel): 如何处理通用模块包含路径验证消息
$ ModuleIncludePrivateWarningLevel (WarningLevel): 如何处理私有模块包含路径验证消息,其中模块会添加公开私有头文件的包含路径。
$ ModuleIncludeSubdirectoryWarningLevel (WarningLevel): 如何处理不必要的模块子目录包含路径验证消息。
$ bUseUnity (Boolean): 如果启用了Unity构建,则可以使用此属性在此特定模块将使用Unity构建时进行覆盖。此属性使用BuildConfiguration中的每个模块配置进行设置。
$ bEnforceIWYU (Boolean): 当PCHUsage设置为ExplicitOrSharedPCH时,强制执行"包含你所使用的内容(include what you use)"规则;使用单块头文件(Engine.h、UnrealEd.h等)时发出警告,并检查源文件是否首先包含与其匹配的头文件。
$ bLegacyPublicIncludePaths (Boolean): 此模块是否相对于其"Public"文件夹的根限定所包含的来自其他模块的头文件。这可以减少需要传递给编译器的搜索路径的数量,从而提高性能并缩短编译器命令行的长度。
$ bLegacyParentIncludePaths (Boolean): 此模块是否相对于父目录限定所包含的来自其他模块的头文件。这可以减少需要传递给编译器的搜索路径的数量,从而提高性能并缩短编译器命令行的长度。