转载时请注明出处和作者联系方式
文章出处:http://blog.csdn.net/jack0106
作者联系方式:冯牮 [email protected]
在linux下工作已经3年多了,对于工程管理工具的使用,也是经历了从简到繁的好几个阶段。
一 手动编写Makefile阶段
这是最初级的阶段,通常也是学习嵌入式linux开发时,最先需要学会使用的工具之一。这个阶段,有两大块内容需要学习,首先是要明白gcc是怎么回事,然后是要了解makefile的一些基本概念和用法。说实话,这个阶段,我对gcc和makefile,其实也只是一些类似于死记硬背试的表面理解。对linux项目工程的认识,也很浅陋,一般认为一个项目,就是最终会编译成一个可执行文件。
我工作后的第一个项目,是mips平台上的一个后台程序,makefile就是纯手工编辑的,比较简单,不到100行,仅仅是完成了编译工作,除了gcc,没有调用到其他的工具。在部署的时候,是把交叉编译出来的唯一的一个可执行文件手动拷贝到开发板的/usr/bin目录中。
二 初次接触qt
我的第二个项目,是arm上的qt程序。在qt中,引入了qmake作为工程管理工具,qmake的作用,其实就是简化makefile的编写。这个阶段,我对makefile的认知,本质上并没有提高,之前对gcc和makefile,用的是死记硬背,这时对于qmake的认识,同样是类似于死记硬背。这个项目的makefile,主要完成的仍然是编译工作。项目本身的依赖关系并不复杂,所以在部署的时候,同样是手动复制。
三 上手moblin
前面做的两个项目,都属于嵌入式平台上的“专用型”程序,是传统意义上的嵌入式程序,和gnome这种桌面环境差别很大。到了第三个项目,开始使用moblin平台,这是一种通用型的平台,已经预装了很多底层的库,程序之间的依赖关系,也变得复杂起来,在这个上面开发程序,更像是传统的桌面环境编程。在熟悉平台的过程中,“迫不得已”需要对gcc和makefile做更深入的学习。在这一轮学习中,对gcc的工作方式有了一些更深入的理解,总结出来就是对几个最常用参数的理解,包括 -I,-L,-l,再加上一个-Wl,-rpath,参数。我在招人的时候,也很喜欢就这几个参数的使用出一些题,百试不爽。
此时的代码,由于项目历史原因,仍然是纯手工编辑的makefile,但是已经感觉到它的不足了,尤其是在部署的时候,最麻烦。比如桌面快捷方式,就得手动编写,不能在make时正确自动生成,再比如dbus服务程序的自启动文件,也是手动编辑,然后拷贝到对应的目录。
四 升级到meego
升级到meego平台,上层开发使用的工具,又回到了qt。经历了之前的使用和学习,对linux环境已经很熟悉了,对程序的运行和部署,也有了更详实的体会。这个时候的代码,使用qmake进行管理,编译,安装,打包,一应俱全。
五 学习autotools
在我的第一个阶段,其实就学习过autotools,但是其实也只是了解了它的形,并不理解它的神,而且由于autotools比较复杂,项目中也一直没有真正的使用过。直到现在,才又重新学习了一边autotools的使用,并且使用autotools对moblin时代的一个项目进行了改造。
六 总结
从功能上看,autotools和qmake,都已经相当的完善了,只不过他们有各自的使用场合,qmake主要还是针对基于qt的程序,而autotools的适用面更广(它的难度也是最大的)。要学习autotools,网上有教程,可以看看,但是最好还是找一些实际的项目代码,看看别人是怎样使用autotools的(网上的教程,通常都是构造一个hello world型的例子,过于简单,学习效果不一定好)。另外,autotools的理念,也跟个人的linux使用经验有关,当对linux系统有了比较深的感受之后,再来学习autotools,可能效果会更好。