现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

大型项目使用Automake/Autoconf完成编译配置(1):提纲挈领

2014-10-21 06:33 工业·编程 ⁄ 共 1500字 ⁄ 字号 评论 1 条

使用过开源C/C++项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install, 使用起来很方便,不像平时自己写代码,要手写一堆复杂的Makefile,而且换个编译环境,Makefile还需要修改(Eclipse也是这样)。

这么好的东东当然要拿来用了,但GNU的Autotool系列博大精深,工具数量又多,涉及的语言也多,要是自己从头看到尾,黄花菜都凉了,项目估计早就结束了;上网搜样例倒是有一大堆,但都是“hello world”的样例,离真正完成大型项目的目标还差得远。

没有办法,对照网上的样例,再找几个开源的源码,然后参考各种Autotools的手册,花了2天时间,终于完成了一个基本可用的Autotools。为了避免其他XDJM也浪费时间,因此将过程总结下来,就算是新年礼物,送给大家!!

提纲挈领:使用Autotools其实很简单

大家不要看到那么多工具,其实使用起来很简单,总结起来就是两部分:

1) 按照顺序调用各个工具;

2)修改或者添加3个文件;

听到我这么讲,大家是否觉得有信心了?好的,下面我们来看具体如何操作:

1. 源码根目录调用autoscan脚本,生成configure.scan文件,然后将此文件重命名为configure.ac(或configure.in,早期使用.in后缀)

2. 【修改】configure.ac,利用autoconf提供的各种M4宏,配置项目需要的各种自动化探测项目

3. 调用aclocal收集configure.ac中用到的各种非Autoconf的宏,包括【自定义宏】

4. 调用autoheader,扫描configure.ac(configure.in)、acconfig.h(如果存在),生成config.h.in宏定义文件,里面主要是根据configure.ac中某些特定宏(如AC_DEFINE)生成的#define和#undefine宏,configure在将根据实际的探测结果决定这些宏是否定义(具体见后面例子)。

5. 按照automake规定的规则和项目的目录结构,【编写】一个或多个Makefile.am(Makefile.am数目和存放位置和源码目录结构相关),Makefile.am主要写的就是编译的目标及其源码组成。

6. 调用automake,将每个Makefile.am转化成Makefile.in,同时生成满足GNU编码规范的一系列文件(带-a选项自动添加缺少的文件,但有几个仍需要自己添加,在执行automake前需执行touch NEWS README AUTHORS ChangeLog)。如果configure.ac配置了使用libtool(定义了AC_PROG_LIBTOOL宏(老版本)或LT_INIT宏),需要在此步骤前先在项目根目录执行libtoolize --automake --copy --force,以生成ltmain.sh,供automake和config.status调用。

7. 调用autoconf,利用M4解析configure.ac,生成shell脚本configure。以上几步完成后,开发者的工作就算完成了,后面的定制就由开源软件的用户根据需要给configure输入不同的参数来完成。

8. 开源用户调用configure,生成Makefile,然后make && make install。

整个过程步骤有8步,但其中有5步你只需要简单的敲一个命令即可,只有剩下的三步需要你动手写一些东西,对应上面步骤中的蓝色黑体字部分,下一篇博文将重点讲述如何在大型项目中完成这三歩。

作者:华仔

目前有 1 条留言    访客:0 条, 博主:0 条 ,引用: 1 条

    外部的引用: 1 条

    • 大型项目使用Automake/Autoconf完成编译配置(2):步步为营 | 求索阁

    给我留言

    留言无头像?