在之前的文章 Build flow of the Unreal Engine4 project 中有提到,UE 编译模块的时候会执行到 ExecuteActions
中。
那么 UE 真正编译每个翻译单元的编译器参数是什么呢?
在 UBT 调用 ExecuteAction 之前,会完成所有编译参数的拼接和预处理。
1 | static void ExecuteAction(ManagedProcessGroup ProcessGroup, BuildAction Action, List CompletedActions, AutoResetEvent CompletedEvent) |
在 Win 上是通过调用 cl-filter.exe
来执行的,而如何把代码和编译参数喂给编译器呢?
UE 是通过生成了一个 .cpp.obj.response
来记录当前编译单元的信息的,包含编译器参数和包含目录 / 输出等等。
该文件在生成位置在模块的 Intermediate 目录下:
1 | Intermediate\Build\Win64\UE4Editor\Development\HotPatcherRuntime\FlibPakReader.cpp.obj.response |
文件内容太长,可以下载该文件查看:FlibPakReader.cpp.obj.response
可以使用手动调用 cl.exe
的方式来执行测试:
1 | cl.exe @CPP_OBJ_RESPONSE_PATH //showIncludes |