以下是我的版本
环境VS2005,WindowsXP
首先说一下Cmake的作用, CMAKE是根据你给的设置,生成VS工程文件,打开这个工程文件编译,就可以得到最终文件。
CMAKE需要指定两个目录。一个是源目录,另一个是目标目录。源目录是CMakeLists.txt文件所在目录。目标目录是生成的VS工程文件目录,当然其中会包含多个工程文件。
针对CEGUI,我这样设置。没什么规定,只是方便。
cegui-deps-0.8.x-src -> cegui-deps-0.8.x-src/build
cegui-0.8.3 -> cegui-0.8.3/build
编译cegui-deps-0.8.x-src简要说明
这一步我命名为“编译依赖”
设置cegui-deps-0.8.x-src,这个CEGUI依赖的库文件,CEGUI作者把所有依赖库集中到一起,方便大家编译,也省去了各库版本不一致的问题。其实这一步骤和编译CEGUI毫无关系,仅仅是生成依赖的库文件,以及把头文件集中到一起。方便CEGUI调用。这一步少编译了某个库文件,而你在生成CEGUI工程的时候,选择了使用它,编译CEGUI的时候将会提示找不到定义。或者无法解决的符号等问题。可以在这一步尽量多编译一些依赖库。以后再决定是否用到这些库。
1、 如图所示填上源文件和目标文件夹。目标文件夹推荐设置在源文件的目录下。这样生成出来的VS工程文件就在build文件夹下。
2、 点击”Configure” 会弹出一个对话框,新建build文件夹,然后选择VS编译器。
3、 等待一会后会出现上图红色部分的众多选项。根据需要勾选需要编译的库文件。
注意勾选 “Advanced”选项,这会显示所有选项。这点很重要。包括后来生成CEGUI工程的时候也是如此。
3.1如果勾选”Grouped”选项。将会把这些选项分组。这里一个是CEGUI,一个是CMAKE
3.2 CEGUI部分如下,鼠标点击一项,悬停在上面将得到该库的提示。
3.3 配置部分
图像库
CEGUI_BUILD_CORONA
CEGUI_BUILD_DEVIL
CEGUI_BUILD_FREEIMAGE
CEGUI_BUILD_SILLY
DirectX
CEGUI_BUILD_EFFECTS11
字体
CEGUI_BUILD_FREETYPE2
OpenGL
CEGUI_BUILD_GLEW
CEGUI_BUILD_GLFW
CEGUI_BUILD_GLM
LUA
CEGUI_BUILD_LUA
压缩
CEGUI_BUILD_MINIZIP
CEGUI_BUILD_ZLIB
XML解析库
CEGUI_BUILD_EXPAT
CEGUI_BUILD_PCRE
CEGUI_BUILD_TINYXML
CEGUI_BUILD_XERCES
CEGUI_MSVC_STATIC_RUNTIME
CMAKE_USE_RELATIVE_PATHS
使用相对路径-没试过
以上库除了CEGUI_BUILD_DEVIL,我在VS2005下都编译通过, CEGUI_BUILD_DEVIL因为代码中有多国字符串,导致编辑器报错,我用不到所以没有深究。
4、 点击”Generate”生成工程文件
本例中工程文件生成在cegui-deps-0.8.x-src/build,到这个文件夹下打开工程,编译。这一步我从来没遇到过错误。
编译cegui-deps-0.8.x-src就算完成了。下面就是编译CEGUI。
编译CEGUI简要说明
这一步我命名为“编译CEGUI”
拷贝资源文件到CEGUI下,同样的方法用CMAKE生成工程文件,但这一步可能会遇到大量错误,其中包括:
编译时候找不到库文件
首先看看dependencies文件夹下是否有这个库文件,如果没有,很有可能是编译依赖时候没有勾选该库。如果有,很有可能是生成CEGUI工程的时候没有勾选改库。
比如XML解析库,CEGUI要求至少有一个XML解析库。所以编译依赖时候至少要勾选一个XML解析库。并且这一步也要选择一个XML解析库。并且编译依赖时候和这一步要一致。
链接时候无法解决的符号
排查方法就是查看VS工程中的链接设置,如果没发现链接需要的库文件,但你又确定库文件已经在dependencies文件夹下面了。那说明你生成CEGUI工程文件时出了错误。
以上两个错误均在下文可以得到100%解决
运行期的崩溃
我在使用过程中遇到几次崩溃。怀疑原因很多,可能是我编译依赖的DLL和程序不匹配。CEGUI本身也有一些BUG。请尽量使用第一步生成出来的DLL和LIB文件来运行CEGUI。如果还是不能解决,只能依靠调试了。
编译时源码中的字符串错误
我在VS2005下使用,源码中有些字符串可能因为编码问题导致编译错误,
工具->选项->文本编辑器->自动检测不带签名的UTF-8编码
不过即使这样还是有一些不能解决,删掉那些字符串。
编译CEGUI开始
1、 将cegui-deps-0.8.x-src/build文件夹下编译出来的dependencies文件夹拷贝到cegui-0.8.3目录下
2、 同样打开Cmake,Configure
勾选CMAKE界面上的Grouped和Advanced后,选项分为以下几类
未分类
UngroupedEntries
库文件设置
Boost
CORONA
D3DX11EFFECTS
DIRECTFB
DIRECTXSDK
DOXYGEN
EXPAT
FREEIMAGE
FREETYPE
FRIBIDI
GLEW
GLFW
GTK2
IL
ILU
IRRLICHT
CEGUI设置
CEGUI
CMAKE基本设置
CMAKE
2.1 这里说一下库文件设置
首先你要明白库文件和配置之间的依赖关系。比如OpenGL依赖freetype和GLEW 、glfw等。这些你可以在实践中总结出来。这里不一一列举。
以GLEW为例,GLEW是OpenGL的扩展库,如果你用到了OpenGL,要设置这个库。当然,如果你用不到,可以忽视它。
因为我们拷贝了dependencies到cegui-0.8.3下,可以看到这里已经有了一些默认设置。如果你没有拷贝可能不会出现这些设置。不过可以看到有些部分依然没有设置。比如GLEW_LIB, GLEW_LIB_STATIC
可以推测这些库的含义。这里我们用GLEW_LIB_DGB的路径复制到GLEW_LIB。用GLEW_STATIC_DGB的路径复制到GLEW_LIB_STATIC
变成一下这样。
这样GLEW库就完全设置好了。同理设置每个你即将用到的库。
每一个库都包含上述选项。
XXX_H_PATH 库头文件
XXX_LIB 动态库的release版lib
XXX_LIB_DGB 动态库的debug版lib
XXX_LIB_STATIC 静态库release的lib
XXX_LIB_STATIC_DBG 静态库debug版
最好都填上。这里我用debug版替代了release版。但动态库和静态库不能相互替代!!!
2.2 CEGUI设置部分
图片解析
CEGUI_BUILD_IMAGECODEC_CORONA
CEGUI_BUILD_IMAGECODEC_DEVIL
CEGUI_BUILD_IMAGECODEC_FREEIMAGE
CEGUI_BUILD_IMAGECODEC_PVR
CEGUI_BUILD_IMAGECODEC_SILLY
CEGUI_BUILD_IMAGECODEC_STB
CEGUI_BUILD_IMAGECODEC_TGA
解析资源的时候需要用到图片,选择图片解析器
脚本
CEGUI_BUILD_LUA_GENERATOR
CEGUI_BUILD_LUA_MODULE
CEGUI_BUILD_PYTHON_MODULES
渲染器选择
CEGUI_BUILD_RENDERER_DIRECT3D10
CEGUI_BUILD_RENDERER_DIRECT3D11
CEGUI_BUILD_RENDERER_DIRECT3D9
CEGUI_BUILD_RENDERER_IRRLICHT
CEGUI_BUILD_RENDERER_OGRE
CEGUI_BUILD_RENDERER_OPENGL
CEGUI_BUILD_RENDERER_OPENGL3
CEGUI_BUILD_RENDERER_OPENGLES
指明CEGUI库支持哪些渲染器,多多益善
XML解析器
CEGUI_BUILD_XMLPARSER_EXPAT
CEGUI_BUILD_LIBXML2
CEGUI_BUILD_RAPIDXML
CEGUI_BUILD_TINYXML
至少选择一个XML解析器!!!
正则表达式
CEGUI_HAS_PCRE_REGEX
内存分配
CEGUI_CUSTOM_ALLOCATORS
CEGUI_CURSTOM_ALLOCATORS_INCLUDE
FREETYPE选择
CEGUI_HAS_FREE_TYPE
选择OpenGL必须选择该项,不然运行时提示OpenGL不支持Freetype。程序就退出了。
编译例子
CEGUI_SAMPLES_ENABLED
勾选本选项将编译例子
例子中渲染器选择
CEGUI_SAMPLES_USE_DIRECT3D10
CEGUI_SAMPLES_USE_DIRECT3D11
CEGUI_SAMPLES_USE_DIRECT3D9
CEGUI_SAMPLES_USE_DIRECTFB
CEGUI_SAMPLES_USE_IRRLICHT
CEGUI_SAMPLES_USE_OGRE
CEGUI_SAMPLES_USE_OPENGL
CEGUI_SAMPLES_USE_OPENGL3
勾选需要编译的例子以及例子中用那些渲染器。例子中的渲染器必须是已经被上述支持的,这点很重要。
值得一提的是:如果你选择了例子中使用多个渲染器。每次程序运行都会弹出一个渲染器选择的列表框。很烦。不如只选一个。
CEGUI字符串类选择
CEGUI_STRING_CLASS
1 为作者自制的CEGUI::String。支持多国语言。UTF到char转换
2std::string 便于调试
3std::basic_string
这些可以鼠标悬停在选项上获得提示
其他没研究过的
CEGUI_STATIC_IMAGECODEC_MODULE
CEGUI_USR_FRIBIDI
CEGUI_USR_MINIDIDI
CEGUI_HAS_DEFAULT_LOGGER
CEGUI_BUILD_SHARED_LIBS_WITH_STATIC_DEPENDENCIES
CEGUI_BUILD_STATIC_CONFIGURATION
CEGUI_BUILD_SUFFIX
CEGUI_HAS_MINIZIP_RESOURCE_PROVIDER
CEGUI_INSTALL_WITH_RPATH
CEGUI_MSVC_STATIC_RUNTIME
CEGUI_OPTION_DEFAULT_IMAGECODEC
CEGUI_OPTION_SAFE_LUA_MODULE
好了,经过设置可以点”Generate”生成工程文件了。然后打开编译。可能会遇到各种错误。但不外乎上述几种。
运行例子
将samples_framework设置为运行项目,调试运行。
会提示没有Samples.xml啊。
把cegui-0.8.3\build\datafiles\samples拷贝到E:\myProjects3\cegui-0.8.3\build\datafiles下面
然后就是找不到DLL了。有几种方法解决这个问题。
具体见这篇文章http://www.cnblogs.com/waterlin/archive/2011/10/31/2230341.html
总结就是:"工程属性" ==> "调试" ==> "环境"里,添加类似如下所示的内容
PATH=%PATH%;D:\myProjects\cegui-0.8.3\dependencies\bin,就是把DLL所在目录添加到临时的环境变量。
最后还会有一些例子运行崩溃。或者有问题。
找到cegui-0.8.3\build\datafiles\samples\samples.xml。打开会看到很多例子。删掉有问题的。再运行。
我删掉了运行期有问题的。只留下如下几个demo
CEGUIHelloWorldDemo
CEGUIEffectsDemo
CEGUIFontDemo
CEGUIDragDropDemo
CEGUIGameMenuDemo
CEGUIHUDDemo
CEGUIInventoryDemo
CEGUIMinesweeper
CEGUIScrollablePaneDemo
CEGUITabControlDemo
CEGUITreeDemo
运行时候崩溃。崩溃位置位于
RenderingSurface::~RenderingSurface
CEGUI_DELETE_AO d_windows[i];
删掉Window.cpp 第1133行 syncTargetSurface();就可以了。具体原因未知。正在查。
最后:向CEGUI代码致敬,向作者致敬。