1. C++編譯
(1)C++編譯后生成的文件
以下對(duì)生成文件的常見(jiàn)文件進(jìn)行說(shuō)明
文件后綴 | 說(shuō)明 |
---|---|
.exe | 可執(zhí)行文件 |
.ilk | 當(dāng)選定漸增型編譯鏈接時(shí)懒棉,連接器自動(dòng)生成ILK文件伴网,記錄鏈接信息 |
.obj | 目標(biāo)文件,obj文件與cpp文件名字一一對(duì)應(yīng) |
.idb | 文件保存的信息吹由,使編譯器在重新編譯的時(shí)候只重新編譯改動(dòng)過(guò)的函數(shù)和 最新類定義改動(dòng)過(guò)的源文件疲迂,這樣可提高變異速度 |
.pdb | 程序數(shù)據(jù)二進(jìn)制文件才顿,用來(lái)記錄調(diào)試信息 |
.cpp | C++源文件 |
(2.)C++編譯過(guò)程
過(guò)程 | 說(shuō)明 |
---|---|
預(yù)編譯器 | 又稱為預(yù)處理。實(shí)現(xiàn)代碼文本替換尤蒿。這個(gè)過(guò)程會(huì)拷貝#include包含的文件代碼郑气,進(jìn)行#define宏定義的替換,處理?xiàng)l件編譯指令#ifdef #endif |
編譯器 | 通過(guò)語(yǔ)法分析和詞法分析腰池,確實(shí)所有指令是否復(fù)合規(guī)則尾组,之后翻譯成匯編代碼 |
匯編器 | 將匯編語(yǔ)言翻譯成目標(biāo)機(jī)器指令的過(guò)程 |
鏈接器 | 主要是將有關(guān)的目標(biāo)文件連接起來(lái)忙芒。原因:(1)某個(gè)源文件調(diào)用另一個(gè)源文件的函數(shù)或常量;(2)在程序中調(diào)用了某個(gè)庫(kù)文件中的函數(shù) |
2. Unreal 編譯C++
Unreal通過(guò)UnrealBuildTool使用自定義構(gòu)建方法【虛幻構(gòu)建系統(tǒng):是自動(dòng)處理構(gòu)建Unreal的工具集合讳侨『侨總的來(lái)說(shuō),UnrealBuildTool和UnrealHeaderTool為虛幻構(gòu)建系統(tǒng)提供支持】跨跨,該工具處理所有復(fù)雜的項(xiàng)目編譯工作潮峦,并將項(xiàng)目與引擎關(guān)聯(lián)起來(lái)。
UnrealBuildTool【namespace命名空間】使用.Build.cs和.Target.cs文件來(lái)構(gòu)建游戲項(xiàng)目歹叮。Unreal使用Target文件給UnrealBuildTool用于編譯生成每個(gè)應(yīng)用模塊跑杭。虛幻項(xiàng)目有多個(gè)由*.target.cs文件描述的目標(biāo)(編輯器、客戶端咆耿、游戲和服務(wù)器)德谅,其中每一個(gè)都可以使用不同的配置來(lái)構(gòu)建。在Visual Studio解決方案配置的命名規(guī)則[配置][目標(biāo)類型]
Unreal編譯C++的過(guò)程如下:
(1) 搜索模塊和插件
- Unreal拆分成許多模塊萨螺。每個(gè)模塊都有*.Build.cs文件窄做,用于控制該模塊的構(gòu)建方式,其中包含諸多選項(xiàng)慰技,用于定義模塊間的依賴關(guān)系椭盏、其他庫(kù)、包含路徑等吻商。
- 在生成項(xiàng)目文件時(shí)掏颊,含有Source文件夾(包含.Build.cs文件)的插件將被添加到項(xiàng)目文件,以便導(dǎo)航到其源代碼艾帐。編譯項(xiàng)目時(shí)乌叶,UnrealBuildTool將自動(dòng)編譯此類插件。
補(bǔ)充:
引擎本身由一組模塊構(gòu)成柒爸,每個(gè)游戲也是由一個(gè)或多個(gè)游戲性模塊構(gòu)成准浴。由于游戲邏輯都可以通過(guò)C++實(shí)現(xiàn),所以模塊實(shí)際上是DLL文件捎稚。
游戲模塊至少要包含一個(gè)頭文件(.h)乐横、一個(gè)源文件(.cpp)和一個(gè)編譯文件(.Build.cs)。
(2)檢測(cè)需要重新編譯的模塊
(3)調(diào)用UnrealHeaderTool來(lái)解析C++類
(4)根據(jù).Build.cs和.Target.cs中的選項(xiàng)來(lái)編譯鏈接
(5)調(diào)用各個(gè)平臺(tái)的編譯工具來(lái)編譯
參考文檔
- https://zhuanlan.zhihu.com/p/32230647
- https://zhuanlan.zhihu.com/p/45402323
- https://docs.unrealengine.com/zh-CN/Programming/UnrealBuildSystem/index.html
- https://docs.unrealengine.com/zh-CN/Programming/Plugins/index.html
- https://docs.unrealengine.com/zh-CN/Programming/UnrealBuildSystem/TargetFiles/index.html