作者damody (天亮damody)
看板C_and_CPP
標題[分享] unreal engine 4 跨平台建置
時間Wed May 21 14:43:12 2014
我要分享的是 unreal engine 4 的建置方式:
這是unreal團隊抓 include 跟 import 的 regex
以下這兩段是c#
static Regex CPPHeaderRegex = new Regex (
"(([ \t]*#[ \t]*include[ \t]*[<\"](?<HeaderFile>[^\">]*)[\">][^\n]*\n*)|
([^\n]*\n*))*" , RegexOptions .Compiled | RegexOptions .Singleline |
RegexOptions . ExplicitCapture );
static Regex MMHeaderRegex = new Regex(
"(([ \t]*#[ \t]*import[ \t]*[<\"](?<HeaderFile>[^\">]*)[\">][^\n]*\n*)|
([^\n]*\n*))*" , RegexOptions .Compiled | RegexOptions .Singleline |
RegexOptions . ExplicitCapture );
unreal engine 4 使用 UnrealBuildTool(UBT)
這一個他們自己用c#寫的工具
來建置所有專案,一開始我覺得很怪,那他們要怎麼編譯
以前的跨平台工具像cmake,都需要自己寫一個build rules
那他們呢?
寫了大量的 cs 檔來描述如何編譯
module(obj) 用 xxx.Build.cs
exe dll lib a 用 xxx.Target.cs
使用自定義的 DynamicCompilation 包裝內建的函數
使用dotnet v4 來編譯
把指定或預設的source path裡面所有的cs檔抓出來編譯
編譯完後再讀進來看有沒有要編譯的模組
unreal 團隊把編譯規則寫在cs檔中
而 linux, mac 則用 mono 的 dotnet 來編譯執行
還自己寫解 include 檔相依性的程式
自己合成編譯指令呼叫 cl.exe 編譯
mac上當然會轉換成對應的參數
unreal 團隊為了開發一個遊戲引擎
寫了一個類似 cmake, bjam 的 c#版 make 工具
寫了一個跨平台的UI Framework
寫了錯誤回報程式
SymbolDebugger
自製pak工具
建立了跨平台的c#動態呼叫機制
......
真的獲益良多。
就算沒有要往遊戲界發展,
光是看他的code就有在吸收高手功力的感覺。
由於他們自定了自己的make工具,
所以可以自定義的選擇自己需要的cpp,
再編譯連結,可以從他們的介紹影片了解這個流程。
遊戲引擎=>開新專案=>遊戲引擎產生c++ class程式碼(.h .cpp)
=>遊戲引擎呼叫cl.exe link.exe生成dll=>dynamic link 進編輯器執行
在 gamedesign 看到的 Why C++ for Unreal 4?
http://ppt.cc/LqAH
在這個project中,感受到了他們的精神,
不過他們的成員都很喜歡使用新東西,
程式碼在windows下要 VS 2013 才編的過。
--
標題 [趣事] 說服老媽進電影院看少年PI
→ milkfox:我的老虎哪有這麼可愛 老虎也要談戀愛 人X虎 11/28 10:18
→ milkfox:鄰座的怪老虎 元氣少年漂流虎 漂流床的寵物老虎 11/28 10:19
→ milkfox:少年與老虎漂流 絕園的人與虎 PSYCHO_TIGER TIGER_NOTES 11/28 10:22
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.118.175.39
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1400654601.A.E9B.html
※ 編輯: damody (140.118.175.39), 05/21/2014 14:44:08
→ Killercat:這不奇怪啊 Qt也是這樣搞的 :D 05/23 02:58
→ Killercat:只是Qt相對單純的多 單純把code做一次pre-pre-compile 05/23 02:59
→ damody:回樓上,我用qt有太多慘痛的經驗 一直不是很喜歡qt 05/23 12:13
→ Killercat:qt5.5用用看 我很推薦喔 :D 05/23 13:02
→ damody:QT 哪來的5.5? 05/24 04:23
→ Killercat:er...現在才看到 -_-; 純粹的手誤打錯字 是5.3 05/24 05:02
推 asoedarren:推 感謝分享 05/24 18:32