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

简介:

           大型项目使用Automake/Autoconf完成编译配置

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

 

这么好的东东当然要拿来用了,但GNUAutotool系列博大精深,工具数量又多,涉及的语言也多,要是自己从头看到尾,黄花菜都凉了,项目估计早就结束了;上网搜样例倒是有一大堆,但都是“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,供automakeconfig.status调用。

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

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

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

相关文章
|
6月前
|
存储 自然语言处理 Linux
CMake基础(1)初识CMake
CMake基础(1)初识CMake
51 0
|
编译器 Perl
autoscan、aclocal、automake和autoconf区别
autoscan: 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是configure.ac的一个雏形;
|
11月前
|
并行计算 编译器 Linux
CMake基础
CMake基础
|
Linux C语言
【Linux】gcc/g++的使用 自动化构建工具make/makefile的使用
【Linux】gcc/g++的使用 自动化构建工具make/makefile的使用
106 0
|
Linux 开发工具 C语言
Linux编译gcc/g++、自动化构建工具make/makefile
Linux中关于gcc/g++的基本操作,以及makefile的基本操作。
Linux编译gcc/g++、自动化构建工具make/makefile
|
Linux
LINUX编译automake
LINUX编译automake
97 0
|
Linux
LINUX编译autoconf
LINUX编译autoconf
72 0
|
Linux
LINUX编译cmake
LINUX编译cmake
98 0
|
Shell
构建工具:Make和Makefile
构建工具:Make和Makefile
|
C语言 Windows 开发工具