学习make

前几天看一个C++代码,挺大的一个程序,然后自己在上面实现一些功能。好不容易写好了一个测试程序,到编译时却遇到了很大的问题:文件之间的依赖太多了。于是就想学学怎么用make来编译我的程序,结果折腾了好半天还是未果:你以为make是随便看看便能学会的?最后我还是用猥琐的办法成功编译了我的程序,但心里却下定决心要学一学make。

这两天都在看GNU make.html,我向来习惯看官方文档而不是别人的博客。但这个文档确实把我看得有些头晕。官方文档真是无所不包,能用到的不能用到的都有。看到后来我终于是完全看懂了那个程序的Makefile,但也觉得自己太没效率:从官方文档里顺序地看确实很耗时间,虽然这样做的好处是可以让你完全彻底地理解它。但它并不是这么容易理解,而在没有完全理解之前,我不仅痛苦,而且低效。看完这个Makefile,我又试探性地看看fcitx的Makefile,这一看更受打击,好多看不懂,很复杂,sed什么的都登场了……但我在这个Makefile的前几行看到一句话:generated by automake. 另我对自己这个学习过程有了一些思考。

其实make只是一个工具,使用好它的关键在于自己对代码的结构要熟悉,然后分模块地建立target。而我不去仔细看EGen的代码结构,却寄希望于make能神一般地帮我编译通过。这真是天大的失误。

还有我的目标其实很不明确,其实我想的是类似于automake的功能,但却纠结于make的用法。期望通过深入地学习make能实现automake的功能。这当然不是不可以,我现在依然相信make可以实现这样的功能。但这种想法并不可行,以我的修为,还做不到在几天之内就“深入地”理解make. 到后来我又发现要发挥make的功能还在于shell脚本编程,对于这个,我还不太会。果然是到处水很深啊。

后来呢?后来我发现原来EGen有个叫libegen.a的库,就是为为开发EGenDriver提供的,只要在编译的时候链接这个库就可以了。

posted @ 2010-11-20 11:54  冰封的水  阅读(313)  评论(0编辑  收藏  举报