添加自定义C++模块为Unreal依赖后编译报错:找不到generated.h文件
解决Unreal加自定义C++模块后主模块generated.h找不到的编译坑
排查方向及解法
1. 先查自定义模块的Build.cs有没有写错
打开你自定义模块的Build.cs,盯紧这几点:
- 模块类型设置对不对?比如运行时模块就写
ModuleType = ModuleType.Game,编辑器模块别乱加到运行时主模块的依赖里 - 有没有循环依赖?比如主模块依赖自定义模块,结果自定义模块又把主模块加到自己的依赖里了,这种循环会直接搞崩代码生成顺序
2. 换个依赖声明位置试试
别把自定义模块放在PrivateDependencyModuleNames,移到PublicDependencyModuleNames里,有时候私有依赖的加载顺序会干扰主模块的代码生成。改完之后重新生成项目文件,把Intermediate文件夹删干净再编译。
3. 自定义模块的代码有没有语法/宏错误
Unreal的代码生成工具(UnrealHeaderTool)特别敏感,自定义模块里的小错误会连累主模块:
- 所有继承UObject的类,必须加
GENERATED_BODY()宏,少一个都不行 - 检查有没有未闭合的宏、语法错误,比如括号没配对、分号漏写
- 可以先把自定义模块的代码全注释掉,只留空的模块结构,编译主模块看看正常不,再逐步恢复代码排查问题
4. 彻底清掉UnrealHeaderTool的缓存
常规删Build、Intermediate这些还不够,得额外清理:
- 删掉项目根目录的
.vs文件夹(用VS的话) - 去
Engine/Intermediate/Build里删掉对应平台的缓存(别瞎删整个Engine文件夹,只删和你项目相关的) - 重新跑
GenerateProjectFiles.bat,等生成完再开IDE编译
5. 模块名或路径有没有冲突
检查自定义模块的名字是不是和引擎内置模块、第三方模块重名了,比如叫"Core"这种绝对不行
- 打开
.uproject文件,确认自定义模块的Name和Path配置正确,路径要指向包含Build.cs的那个文件夹 - 主模块Build.cs里写的模块名,要和
.uproject里的完全一致,大小写也别马虎(Windows下无所谓,但跨平台编译会翻车)
报错参考:
Enums.h(7): [C1083] Cannot open include file: 'Enums.generated.h': No such file or directory
这种报错本质是UnrealHeaderTool没生成主模块的generated文件,加自定义模块后出问题,基本就是模块依赖关系不对,或者自定义模块的代码把代码生成工具搞挂了。
内容的提问来源于stack exchange,提问作者staskjs
相关产品推荐
相关产品推荐

