在研究一个成熟的开源项目的时候,除了源代码以外,往往会发现一些其它的东西:Docs、配置文件等等,有时让人“丈二金刚摸不着头脑”——根本不知道有些文件是干嘛的。在最开始,我是冲着一个项目的代码去的,渐渐的,“只见树木不见森林”的感觉越来越强烈,甚至产生放弃继续学习的念头。
其实,茶余饭后,将这些“神秘文件”拿着搜索搜索、研究研究,也能起到启发思维、提高宏观认识的效果。C++和Java项目的不同之处,往往是底层做起、项目文件非常多(它可不提供包之类的机制呢);当这些文件、类,产生依赖关系的时候,一个人很容易被弄糊涂了。
FishGUI/X11/目录下,是一些.in、.am文件,而且似乎是linux下的格式(用UE打开)。随便看一个.in文件,里面全是一些晦涩的宏定义——倒有点像批处理文件呢!在网上搜索.in,没什么结果;仔细看看文件内容,发现一个AC_CHECK_LIB,有点类似函数、宏功能,于是搜索一下,果然:它们是Autoconf产生的文件,GNU相关[1];至于这个AC_CHECK_*,就是用来检查lib文件是否存在的吧!对于复杂的项目管理,文件结构、配置文件的位置,都会影响编译运行的成败。
就这么一小会功夫,我发现自己对项目的认识又增加了几点:
1, 这些莫名的文件的用途,心中的疑虑减少了[2]。
2, Autoconf这个工具,我现在不再一无所知了。
3, 项目的编写环境,可能是在linux下进行的;可能有很多的配置,我现在还没有留意到。
有时候,摆脱一些“傻瓜式”的思维,不妨将目光放得稍微深入一些、分散一些。代码确实代表着真相,但是干什么事情都得有个头绪、有个高度才行。
[1] http://www.shlomifish.org/lecture/Autotools/slides/ GNU Autoconf, Automake and Libtool介绍
http://patton.spaces.eepw.com.cn/articles/article/item/29282# autoconf手册
[2] 至少,我明白删除它们,不会对项目的编译产生什么副作用。在后继编译的工作中,如果发现问题,我不会到X11这个文件夹中翻找源代码。