本文简要说明了在嵌入式环境下如何精减GNU autotools(主要涵盖 autoconf、automake、libtool等)系统,以适应不同平台的编译需求。
一、简要介绍GNU autotools的历史渊源
GNU autotools的形成主要有两个历史渊源:先阐述一个碎片化的概念:unix自诞生之日起,就形成了大量的变种和分支,后来又出现了的大量的类unix系统(包括后起之秀linux),以及各种发行版。不同系统提供的头文件和库都有不少差异,这就给软件的发行带来了相当大的难度,发行一个软件必须测试所有的目标系统。这称之为unix的碎片化。
1)为解决碎片化的问题,autoconf可以通过提供测试项来测试目标系统的库和文件是否满足软件编译和运行的需求,若无法满足则报错(历史上出现过多种类似系统,有交互式的有非交互式的)。libtool也是同样的目的,不同的是,它的目标是提供和使用一致性的动态库。
2)自从Stuart Feldman 1977年在bell lab中制作了make工具(因此获得acm软件系统奖),make的使用越来越广泛,但撰写makefile(特别是为大型项目)尤其头痛。automake就为此而生。
二、autotools的框架
要学习autotools的知识,需要bash shell、GNU m4(老古董,宏扩展语言,缅怀Dennis Ritchie先生,后期会再撰文介绍)、make等的基础知识。
下述框图摘自GNU autoconf manual:
1)如果你只使用autoconf系统发布软件
your source files --> [autoscan*] --> [configure.scan] --> configure.ac
configure.ac --.
| .------> autoconf* -----> configure
[aclocal.m4] --+---+
| `-----> [autoheader*] --> [config.h.in]
[acsite.m4] ---'
Makefile.in
2)如果你采用了automake,下述的操作也需要被执行ÿ