UE4中的所有模块都需要包含一个[模块名].Build.cs文件,该文件的代码格式差不多长下面这样:
using UnrealBuildTool;
public class SimpleWindow : ModuleRules
{
public SimpleWindow(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
PublicIncludePaths.AddRange(
new string[] {
// ... add public include paths required here ...
}
);
PrivateIncludePaths.AddRange(
new string[] {
// ... add other private include paths required here ...
}
);
PublicDependencyModuleNames.AddRange(
new string[]
{
"Core",
// ... add other public dependencies that you statically link with here ...
}
);
PrivateDependencyModuleNames.AddRange(
new string[]
{
"Projects",
"InputCore",
"UnrealEd",
"ToolMenus",
"CoreUObject",
"Engine",
"Slate",
"SlateCore",
// ... add private dependencies that you statically link with here ...
}
);
DynamicallyLoadedModuleNames.AddRange(
new string[]
{
// ... add any modules that your module loads dynamically here ...
}
);
}
} [模块名].Build.cs的作用就是通过让UBT告诉编译器这个模块需要依赖哪些其他的模块,从而让该模块能够找到所需模块的.dll文件。
PublicDependecy中所包含的模块能够让其他包含该模块的模块也能够使用(感觉好绕...),意思就是如果模块A在PublicDependecy中包含了模块B,那么当模块C包含模块A的时候也能够1同时包含模块B。
PrivateDependecy中所包含的模块则只有当前模块可以看见,包含该模块的模块看不见。
其实就是一个添加模块的路径,一个添加模块的名字。
using UnrealBuildTool;
using System.Collections.Generic;
public class MyProject2Target : TargetRules
{
public MyProject2Target( TargetInfo Target) : base(Target)
{
Type = TargetType.Game;
//还有下面几种类型
//Type = TargetType.Editor;
//Type = TargetType.Client;
//Type = TargetType.Server;
DefaultBuildSettings = BuildSettingsVersion.V2;
ExtraModuleNames.AddRange( new string[] { "MyProject2" } );
}
} Type = TargetType.xxx对应不同的.exe类型(比如你是用的DebugGame Editor还是DebugGame来构建项目)。
我使用的4.27版本默认包含一个Editor.cs和一个Target.cs,区别就是Type不一样。
和Build.cs不同,不是所有模块都需要有Target.cs,Target.cs文件默认创建在Source文件夹下面,和游戏模块放在一起。游戏模块就是Source下面的那些文件夹,默认的那个和项目同名的就是游戏的主模块。同样的这些模块也包含了[模块名].Build.cs文件。Target.cs文件的作用是控制项目输出不同的.exe时能够包含不同的游戏模块。例如:有游戏模块A、B、C,可以在Editor下包含A、B模块,而其他模式下包含A、C模块。
Build.cs的作用是解决模块与模块间的依赖关系,而Target.cs解决的是输出的可执行文件中应该包含哪些模块的问题。而实现这些功能靠的都是UE4中的UBT工具。
从逻辑上来说,Target.cs的层级是高于Build.cs的。
参考:
https://unrealcommunity.wiki/build.cs-hv582z08
https://baemincheon.github.io/2021/04/07/difference-between-build-cs-and-target-cs/
《大象无形:虚幻引擎程序设计浅析》——罗丁力 & 张三