看板 C_and_CPP 關於我們 聯絡資訊
我要分享的是 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