一、说明
修改开源软件的时候,常看到长达几万行的configure和几千行的Makefile,于是疑问!
a) 提问:
i. 这是人写的吗?
ii. 需要看懂它吗?
iii. 怎么修改它?
b) 回答:
i. 它是自动生成的
ii. 不需要看懂它,只需要看懂生成它的配置脚本就可以了(生成它的脚本一般只有几十行,而你也只需看懂你所关心的部分)
iii. 主要修改Makefile.am和configure.in就可了,其它一般都是自动生成的
(最好不直接修改Makefile文件,因为下次configure时它就像覆盖了)
c) 工具
autoconf,automake
d) 具体步骤
configure.scan => configure.in => configure
Makefile.am => Makefile.in => Makefile
二、准备工作
安装依赖软件包
a) $ apt-get install gettext
b) $ apt-get install libtool
c) $ apt-get install intltool
三、新建项目中,建立configure和Makefile
a) 建立源码目录结构
b) 用命令生成基本的configure配置脚本
$ autoscan // 生成configure.scan
$ mv configure.scan configure.in // 改名
c) 修改基本的configure脚本,加入所需要内容
$ vi configure.in
d) 写各层目录的Makefile.am以备生成Makefile.in和Makefile
$ vi Makefile.am
e) 自动生成configure文件,各层目录中的Makefile.in文件
$ aclocal
$ libtoolize –force
$ autoconf // 生成configure
$ automake –add-missing // 生成Makefile.in
f) 编译
$ ./configure // 此时生成了各层Makefile
$ make; make install
四、已有项目中,修改configure和Makefile
a) 修改生成configure所依赖的脚本configure.in
$ vi configure.in
在其中添加新的依赖库及版本判断
b) 修改各层的Makefile.am,以备生成Makefile.in和Makefile
$ vi Makefile.am
加入新的子目录
加入新的代码文件
加入新的依赖库
c) 自动生成configure文件,各层目录中的Makefile.in文件
方法同上
可以把上面四行写成autogen.sh脚本,以方便每次修改完configure.in和Makefile.am后直接执行
d) 编译
同上
五、参考
a) 完整例程详见(含源码及脚本)
http://xy0811.spaces.live.com/default.aspx?_c01_BlogPart=blogentry&_c=BlogPart&handle=cns!F8AECD2A067A6B17!1002