1.介绍
Linux环境下,我们编译程序啥的都是一般用的GCC&&GDB等等工具,直接使用GCC命令进行编译操作。这种方式一般是适用于程序文件比较少,组织结构比较简单的情况。但是,当我们程序文件比较的多的时候,或者是程序文件组织结构比较的复杂(例如在程序文件夹中存在文件夹多层嵌套以及复杂引用等),此时我们如果是直接使用GCC一点一点的编译工作量会非常的大,而且万一程序修改了,还要重新的再工作一遍。为此,我们有了make工具,依靠Makefile辅助文件,我们可以方便的进行工程的管理,以及编译操作。当程序很复杂的时候,依靠我们去手工的建立、维护Makefile文件是非常的不现实的,不仅很复杂,而且费时费力,还容易出错。为此,就有了我们的_Autotools_工具,只要输入工程中的目标文件、依赖文件、文件目录等信息就可以自动生成Makefile。这时使用autotools工具就是一个不错的选择,只要输入工程中的目标文件、依赖文件、文件目录等信息就可以自动生成Makefile。autotools工具是个系列工具,主要有:aclocal、autoscan、autoconf、autoheader、automake。
2.autotools组成
名称 | 功能 | |
autoscan | autoscan是用来扫描源代码目录生成configure.scan文件的。 | configure.scan包含了系统配置的基本选项,里面都是一些宏定义。我们需要将它改名为configure.in |
aclocal | aclocal是一个perl脚本程序。aclocal根据configure.in文件的内容,自动生成aclocal.m4文件。aclocal的定义是:“aclocal - create aclocal.m4 by scanning configure.ac”。 | 生成的aclocal.m4是宏展开文件 |
autoconf | autoconf是用来产生configure文件的 | configure.in文件的内容是一些宏,这些宏经过autoconf处理后会变成检查系统特性、环境变量、软件必须的参数的shell脚本 |
autoheader | 自动生成config.h.in | 在configure生成config.h时候的in文件 |
automake | 我们使用automake --add-missing来产生Makefile.in | Makefile.am是用来生成Makefile.in的,需要你手工书写 |
3.autotools处理流程
Autotools使用流程:
1.目录树的最高层运行autoscan,生成configure.scan文件;
2.运行aclocal,生成aclocal.m4文件;
3.运行autoconf,生成configure配置脚本;
4.运行autoheader,生成config.h.in文件;
5.手工编写Makefile.am文件;
6.运行automake,生成Makefile.in;
7.运行配置脚本configure,生成Makefile。
1.目录树的最高层运行autoscan,生成configure.scan文件;
2.运行aclocal,生成aclocal.m4文件;
3.运行autoconf,生成configure配置脚本;
4.运行autoheader,生成config.h.in文件;
5.手工编写Makefile.am文件;
6.运行automake,生成Makefile.in;
7.运行配置脚本configure,生成Makefile。
4.autotools安装
[root@localhost ~]# yum install automake Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com Resolving Dependencies --> Running transaction check ---> Package automake.noarch 0:1.13.4-3.el7 will be installed --> Processing Dependency: autoconf >= 2.65 for package: automake-1.13.4-3.el7.noarch --> Processing Dependency: perl(TAP::Parser) for package: automake-1.13.4-3.el7.noarch --> Running transaction check ---> Package autoconf.noarch 0:2.69-11.el7 will be installed --> Processing Dependency: m4 >= 1.4.14 for package: autoconf-2.69-11.el7.noarch ---> Package perl-Test-Harness.noarch 0:3.28-3.el7 will be installed --> Running transaction check ---> Package m4.x86_64 0:1.4.16-10.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================================================================================= Package Arch Version Repository Size ============================================================================================================================================================================================= Installing: automake noarch 1.13.4-3.el7 base 679 k Installing for dependencies: autoconf noarch 2.69-11.el7 base 701 k m4 x86_64 1.4.16-10.el7 base 256 k perl-Test-Harness noarch 3.28-3.el7 base 302 k Transaction Summary ============================================================================================================================================================================================= Install 1 Package (+3 Dependent packages) Total download size: 1.9 M Installed size: 4.9 M Is this ok [y/d/N]: y Downloading packages: (1/4): automake-1.13.4-3.el7.noarch.rpm | 679 kB 00:00:00 (2/4): autoconf-2.69-11.el7.noarch.rpm | 701 kB 00:00:00 (3/4): perl-Test-Harness-3.28-3.el7.noarch.rpm | 302 kB 00:00:00 (4/4): m4-1.4.16-10.el7.x86_64.rpm | 256 kB 00:00:00 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Total 4.8 MB/s | 1.9 MB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : perl-Test-Harness-3.28-3.el7.noarch 1/4 Installing : m4-1.4.16-10.el7.x86_64 2/4 Installing : autoconf-2.69-11.el7.noarch 3/4 Installing : automake-1.13.4-3.el7.noarch 4/4 Verifying : m4-1.4.16-10.el7.x86_64 1/4 Verifying : perl-Test-Harness-3.28-3.el7.noarch 2/4 Verifying : autoconf-2.69-11.el7.noarch 3/4 Verifying : automake-1.13.4-3.el7.noarch 4/4 Installed: automake.noarch 0:1.13.4-3.el7 Dependency Installed: autoconf.noarch 0:2.69-11.el7 m4.x86_64 0:1.4.16-10.el7 perl-Test-Harness.noarch 0:3.28-3.el7 Complete!