Unreal .uproject中AdditionalDependencies字段含义与作用
Unreal Engine
.uproject 中 AdditionalDependencies 字段说明 字段配置项类型
Modules配置节下的AdditionalDependencies字段内的配置项既不是常规业务模块,也不是插件,是Unreal Build Tool(UBT,UE的专属构建工具)可识别的构建目标名,属于非常底层的构建配置项,普通业务开发几乎不会用到。
注意不要把这个字段和
.Build.cs文件内的同名AdditionalDependencies字段混淆,后者是用来配置当前模块需要链接的外部静态库、动态库文件路径的,二者作用完全不同。
声明依赖的实际作用
如果在模块A的该字段下填入"B",唯一的实际效果是:UBT编排构建任务顺序时,会强制等待名为"B"的构建目标完全构建完成后,才会启动模块A的编译流程。
这个配置不会产生任何编译、链接、运行时层面的关联效果:
- 不会把B的头文件目录加入A的include搜索路径,A的代码里直接include B的头文件会报找不到文件的错误
- 不会把B的二进制产物加入A的链接输入列表,代码里直接调用B的接口会报链接符号不存在的错误
- 不会在游戏启动、打包时配置B的自动加载逻辑,运行时不会主动加载B模块
你给出的示例配置,除了调整A和B的构建先后顺序,不会对代码编写、链接、运行逻辑产生任何影响。很多新手会误以为这个字段可以替代.Build.cs里的依赖配置,实际上在这里填常规模块名除了降低构建并行度、调整构建顺序外没有任何实际作用,日常开发不要随意修改这个字段。
"Modules":[ { "Name":"A", ... "AdditionalDependencies":[ "B" ] }, ... ]
与.Build.cs中依赖配置的差异
.uproject中AdditionalDependencies声明的依赖,和模块对应.Build.cs文件里的PublicDependencyModuleNames/PrivateDependencyModuleNames声明的依赖有本质区别,核心差异如下:
- 依赖强度不同
.Build.cs中的依赖是编译链接运行全链路强依赖:UBT会自动处理头文件搜索路径、二进制链接、运行时/打包时的模块自动加载;其中PublicDependencyModuleNames声明的依赖还会把相关属性透传给所有依赖当前模块的其他模块,PrivateDependencyModuleNames的依赖仅对当前模块内部可见。AdditionalDependencies是仅构建顺序层面的弱依赖:除了保证构建先后顺序,不会添加任何编译、链接、运行时的关联逻辑,也不会对其他依赖当前模块的目标产生任何影响。
- 适用场景不同
.Build.cs中的依赖是日常C++模块开发配置跨模块引用的标准方式,所有业务层、插件层的模块互相引用都应该在这里配置。AdditionalDependencies仅用于引擎底层开发、自定义构建扩展场景,比如需要在模块编译前完成非UE标准的资源预处理、自定义静态库/动态库的独立构建、特殊构建步骤执行等场景,才需要配置这个字段。
内容的提问来源于stack exchange,提问作者Andrew Tomazos
相关产品推荐
相关产品推荐

