iwyu
IWYU
📘 Unreal Engine 4 - IWYU (Include What You Use)
🏷 什么是 IWYU?
IWYU = Include What You Use
这是 Epic 在 UE4.15 起引入的头文件依赖管理规范。
核心思想:
👉 只 include 你实际需要用到的头文件,避免不必要的依赖。
🔍 为什么需要 IWYU?
- 减少编译时间
- 传统 UE4 项目常用
Engine.h/UnrealEngine.h,会导致巨量无用头文件被编译。 - IWYU 强制精简依赖,只编译所需。
- 传统 UE4 项目常用
- 降低耦合度
- 避免类间不必要的硬依赖,保持模块独立性。
- 提升可维护性
- 明确每个类/函数所需的头文件,方便迁移和重构。
⚙️ IWYU 的规则
- 禁止使用大一统头文件
- ❌
Engine.h - ❌
UnrealEngine.h - ✅ 改为只 include 必需模块的头文件。
- ❌
- 前置声明(Forward Declaration)优先
- 如果只在
.h中使用指针/引用 → 用class XXX;前置声明即可。 - 只有需要完整定义时,才 include 对应的头文件。
- 如果只在
- .cpp 中 include 完整定义
- 如果类成员或函数需要调用方法、访问成员 → 在
.cpp里 include 头文件。
- 如果类成员或函数需要调用方法、访问成员 → 在
- 使用 Minimal.h
- 在 UE4.15+,推荐
#include "CoreMinimal.h" - 包含最常用的类型(
FString、TArray、UObject基础等)。
- 在 UE4.15+,推荐
📝 示例
传统写法(未启用 IWYU)
| |
⚠️ 问题:Engine.h 引入了大量无关的头文件。