CMake以及OpenSceneGraph工程简介
OpenSceneGraph和OpenThreads工程(1.9.x以上及SVN版本)已经开始使用CMake来构建统一的编译和生成系统。Cmake读取源代码目录中简单的CMakeLists.txt脚本文件,并创建多种平台相关的编译和生成系统,例如Visual Studio工程,Unix Makefile工程,Xcode工程等。CMake可以自动定位外部依赖库,允许用户自行选取和取消各模块的编译,并自由地配置生成选项。
统一的生成系统可以有效避免不同的生成环境(Visual Studio,Unix,XCode)下的诸多编译和生成问题,通常情况下这类错误屡见不鲜。这无疑可以降低核心开发者和社区成员的开发强度。这种模式还为最终用户提供了更加稳定和持久的平台相关生成环境,并使得新版本的开发和发行更为高效。我们预计未来OpenSceneGraph的多平台生成系统将会更加稳定,其开发过程更加简单,对于高质量代码的测试和重构也会有所助益。
获取CMake的方法
对于Windows平台的用户,建议使用CMake 2.4.6的版本。对于OS X Xcode的支持还在开发和测试当中,因此建议尝试使用SVN的版本。
- 可执行文件的下载地址:http://www.cmake.org/HTML/Download.html
- Linux发行版自带安装程序,其中一般已经包括CMake,请检查CMake软件是否为较新的版本。
- CMake源代码的下载地址:http://www.cmake.org/HTML/Download.html
- 开发版本的源代码下载地址:http://www.cmake.org/HTML/Download.html
Unix下的生成过程(Mingw和Cygwin用户请参阅Windows下的生成过程)
Unix的生成系统在控制台下实现,可以使用cmake直接创建生成系统,或者使用ccmake打开一个文本模式的用户界面,调整相关的选项。系统生成后,用户还可以使用make edit_cache命令重新构建生成系统。用户可以选择在本地源代码目录生成库文件和可执行文件,并分别放置在本地lib和bin目录下,也可以脱离源代码目录进行生成,即,所有生成的中间文件和最终库均放置在独立的目录下。后一种生成方法在生成多个目标(如32-bit和64-bit,或者源代码目录来自网络,且生成平台不同)时是非常有用的。CMake还可以执行源代码的完全清理工作。总之,我们建议使用CMake生成库文件,并保存在用户自定义的目录下。
注意:如果之前你已经将生成文件保存在源代码目录下,,之后又准备再次生成文件并保存在别的目录下,则需要手动清理源代码目录下CMake的缓存文件,否则可能造成混乱。
生成并保存在源代码目录下:
cd OpenThreads ccmake . make sudo make install cd .. cd OpenSceneGraph ccmake . make sudo make install cd ..
生成并保存在用户目录下(推荐):
mkdir build_OpenThreads cd build_OpenThreads ccmake ../OpenThreads make sudo make install cd .. mkdir build_OpenSceneGraph cd build_OpenSceneGraph ccmake ../OpenSceneGraph make sudo make install cd ..
注意:如果你准备为CMake支持的IDE环境(例如KDevelop)生成工程文件,则需要在CMake命令后添加-G<generator-name>,即,输入“ccmake -GKDevelop3”而非“ccmake”。
Windows下的生成过程(包括Microsoft Visual Studio,MinGW,Cygwin等)
- 从开始菜单启动CMake。
- 拖动CMakeLists.txt到CMake界面上。
- 生成并保存到用户目录(推荐)时,改变“Where to build the binaries”编辑框的内容(例如在末尾添加“\build”)。
- 点击“Configure”,并选择编译器及IDE环境。
- 补充和修改可选项,指定参与编译的依赖库路径(如果配置过程中出现错误,CMake会弹出错误对话框)。
- 点击“Generate”。
- 现在我们已经生成了所需的工程文件。我们可以使用之前指定的IDE环境打开工程文件(工程文件可能保存在之前设定的用户目录中)。如果生成的是Makefile文件,我们可以使用make来运行生成。
注意:用户可以采用和Unix生成系统类似的方法,在命令行下运行CmakeSetup.exe。它相当于ccmake的作用。(用户可能需要使用全路径名来运行CmakeSetup.exe)
注意:用户也可以使用右键“打开方式”菜单来使用CMake工具。在CMakeLists.txt文件上使用右键点击,选择“打开方式”->“选择程序…”,浏览并选择CMake安装目录下的CmakeSetup.exe。这之后,每次重新生成工程文件时,都可以右键点击CMakeLists.txt文件,并选择“打开方式”->“CMakeSetup”。用户也可以直接把.txt文件关联到CmakeSetup上,但是上面所述的方法更为适用。
Mac OS X下的生成
目前CMake还不支持许多Mac的特性,例如Universal Binaries,install_name以及frameworks。不过,我们还是可以采用Unix形式来执行工程文件的生成。参看Unix下的生成过程。用户还可以使用CMake的“-GXcode”参数来生成Xcode工程。
后继计划
下面列出的是未来工作中将要解决的问题:
- 修正CMake的生成依赖库:
- src/osgPlugins/dae (COLLADA插件)
- src/osgPlugins/jp2 (JPEG200插件)
- src/osgPlugins/pfb (Performer插件)
- src/osgPlugins/vrml (libvrml插件)
- src/osgPlugins/xine (xine-lib插件)
- 库文件的版本问题。
- OSG的Doxygen文档生成(包括OpenThreads)。
- 修正Windows下的第三方依赖库,保证Find*.cmake文件可以找到正确的依赖库名称:
- 去除库文件的前缀名。
- 去除库文件的后缀版本名(例如freetype219.dll)。
- 测试静态库的生成(目前的库生成顺序可能有问题)。
- 修正OSG 2.0中包含的Findosg*.cmake文件(可能有冗余的部分)。
- Ctest的使用(不必用于OSG的生成)。
- Cpack的使用?
- 使用OpenSceneGraph和CMake生成用户程序的示范工程(可选)。
- Mac OS X的frameworks支持(需要修改CMake)。
- Mac OS X的install_name支持。
- Mac OS X的Universal Binaries支持:
- 可能需要修改CMake,实现OS版本的合理检测。
- 测试64-bit环境的生成,基于Leopard。
- CMake(使用-F/System/Library/Frameworks)的现有问题导致Universal的编译失败,CVS版本可能修正了这一问题。
- Mac OS X的CMake INSTALL特性:
- Unix样式的安装,应该已经实现。
- Mac样式的安装,尚未实现。
- Mac OS X生成.app捆绑。
- Mac OS X生成选项,使用X11。
