转自:《你所不知的OSG》第一章:CMake初步(1)http://bbs.osgchina.org/forum.php?mod=viewthread&tid=1189&fromuid=3434
本章的主要目的并非介绍OpenSceneGraph的常用类和功能,而是介绍它的一个重要伙伴,抑或说,是一个被愈来愈多的开源软件所青睐的强劲的辅助开发工具——CMake。
CMake的定义是:一个跨平台、开源、可扩展的软件编译生成系统,如果您熟悉与之同类的QMake(开源开发库Qt的自动工程生成工具)或者Automake(Unix系统的常见工程生成工具)的话,想必更有助于对它的深入了解。用一句话来描述的话,CMake的工作就是:辅助生成不同平台上的Makefile脚本,从而建立整个软件工程的编译生成规则,以及它内部以及它与其它软件工具之间的依赖关系。
不要认为Makefile只是Unix/Linux程序员的专属用品;Windows的程序开发同样离不开Makefile的概念。事实上,那些层出不穷的强大得令人眼花缭乱的IDE环境(譬如,家喻户晓的Visual Studio)为开发者们提供了太多的便利条件,以至于大家都渐渐学得好吃懒做起来——按个按钮,找个菜单项,或者极不情愿地在命令窗口中输入一串“start”字符……一切就可尽在掌握?抱歉,这世界上不会有那么多的便宜事。更多的时候,您不得不用着最简陋的文本编辑器,一行一行敲击,一行一行地耕耘。
以上就是我们即将面临的学习内容——已经悠悠地打着哈欠了吗?对于那些没有Visual Studio,没有窗口和进度条,甚至没有鼠标可用的情景,一点都不愿理会吗?呃,那么敬请期待笔者的下一篇文字。(^_^)
不然的话,欢迎进入自由教程《你所不知的OSG》的第一章。工欲善其事,必先利其器。现在就来尝试了解一下——也许你还有所不知的辅助编译工具,CMake。
1.1 CMake概述
善用兵者,役不再籍,粮不三载。 CMake也许就可以喻为这样一位英武的大将。虽然看起来那么麻烦,那么深不可测,但是真正摸透它的脾气禀性之后,却能够得心应手,进而统领千军万马,事半而功倍。 CMake的核心是脚本配置文件,也就是CMakeLists.txt这个简单的脚本文件,浏览一下OpenSceneGraph的源代码目录就可以发现,从根目录开始,几乎每一个包含了子工程源代码的目录(src,examples,applications等)都会同时附带一个CMakeLists.txt。在Windows下编译OSG时,只要轻松地将根目录的CMakeLists.txt拖动到CMake-GUI的窗口中,再进行相应的选项设置,就能够生成OSG的VisualStudio工程文件(或者,以笔者的喜好,生成nmake可用的Makefile文件),进而编译得到OSG动态链接库。 Linux用户所需的工作如出一辙,在根目录下执行:
复制代码 然后直接调用生成的Makefile脚本:
复制代码 如此而已。 但是,试图直接使用子目录的CMakeLists.txt却是无效的,原因很简单,系统找不到许多在根目录的CMakeLists文件中配置的参数和宏,因而会产生错误提示,无法继续执行。 说了这么多,不知您从中摘出了多少对自己有用的信息呢?也许您还在被那些恼人的问题折磨着吧——我怎么生成不了FreeType插件呢?OSG怎么找不到我的第三方库呢?那么多的配置选项都是什么意思呢?本文无力解答这么多的问题,也许其中一些会在后继的文字中得到解答,也许其中一些笔者和其他研究者们也未曾探究过,也许其中一些只有您自己钻研得出答案……也许,也许您也曾一闪念想过,如果我的工程也使用CMake来配置,然后一个命令就整整齐齐地输出链接库和可执行文件来,让其他挠着头皮的同事们乍舌不已——那该有多么潇洒呢? 那么,这才是本文的编写目的所在:就是设法帮助您,初步初步学会使用CMake编写自己的工程配置脚本,初步学会理解和阅读他人的CMake配置脚本代码,并因而能够独力阅读和理解OpenSceneGraph那繁多的配置选项,并在不算浩瀚的CMake脚本代码中(总比OSG的源代码要简单许多)找寻它们的芳踪。
|