楼主:
damody (天亮damody)
2014-05-21 14:43:12我要分享的是 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 才编的过。