Linux下软件的发布形式主要是源码形式,相比windows下的主流二进制模式,应该说是给用户极大的自由,同时也带来极大的挑战。在Linux下编程,往往出现直接用源码加Makefile的形式发布,这样做不仅仅是粗糙的,而且也显得不是很专业。实际上Linux下的软件自有她的一套比较成熟的发布模式,回想一下,如果通过源码安装软件一般的时侯都需要些什么步骤呢?想起来了吧?
$ ./configure $ make $ make install
|
是不是上面的三部曲呢?
这是暴露给用户的过程,那么开发人员将如何着手,如何实现类似上面的软件包安装过程呢?
下面就请跟我一路走来!
其实,Linux为我们想得比较周全,在Linux系统上的autoxxx系列脚本能协助我们轻松完成软件包的制作过程,下面请先看一下这一系列工具之间的关系和制作软件包的流程图:
是不是被上图吓着了?有些烦琐,事实也确实是这个样子,不过没有办法,要想包袱正规,且易于移植,忍一下无所谓的(如果你真的觉得有所谓,就不要再看下去了,等我给你写的脚本吧!),哈哈!
简单分析上图,可以发现实际的入口之有两个:source和Makefile.am,其他的只是执行一些命令而已。每个命令的输入输出在上图已经标得很清楚了,不再赘述。
简单介绍一下每个文件的作用:
- configure.in: 这个文件定义一些安装此软件系统需要具备的一些条件,如c编译器,某个特定库,诸如此类的东西。另外,他还定义一些编译时可能用到的环境变量和源码可能需要用到的一些宏。
- Makefile.am: 这个文件定义了make程序需要在此目录所做的一些工作,比如说编译某个可执行程序,编译某个库文件啦!不过这个文件的撰写还是相对于Makefile要简便的,不信就接着往下看!
- config.h.in:是config.h的模板了。
- configure: 这个脚本可就功能强大了(BTW:体积也很大,动辄几万行),他会检查系统目前编译此软件的条件是否充分,并动态定义一些宏和环境变量,并最终生成Makefile。
- Makefile.in: 是Makefile的蓝本。(是不是发现一个规律,autoxxx中的蓝本文件似乎都是以xxx.in命令的,不过奇怪的是为什么不以诸如xxx.template的形式命名呢?我是不是问题多了点儿,whatever,不关大要的,不管了,如果理解为输入文件也就容易理解了,希望不是曲解!嘿嘿!)
- config.h: 这个文件比较重要了,一些关键的源码中可能用到的宏都有可能位于这里哦!
- Makefile: 没什么好解释的,用过的都知道他是用来build源码的(还是罗嗦了)。
是不是有了以上的autoxxx系列工具我们就能做出一个象样的源码包了,答案是肯定的。不过还是美中不足,因为在开源社区中你的软件作品所面对的是全球的用户(虽然,很可能只有本国的为数不多的人使用你的软件
),所以我们必须时刻记着自己的客户是全球用户,我们的软件需要“国际化”(曾经跟人说国际化就是软件能够以各种语言界面呈现给用户,还被人鄙视,不想与那些无知争辩了),也就是常说的i18n(internationalization,BTW:英文单词有的实在是太长了,老外自己都忍受不了了,居然连这样的缩写都用上了)支持。
本来想今天就让大家和我一起走一遍制作一个包含了国际化支持的软件包的"过场",无奈时侯不早了,该洗洗睡了,晚安,明见!
阅读(1355) | 评论(0) | 转发(0) |