http://blog.csdn.net/panzhh459/article/details/5747412

3.3、autotools工具

3.3.1、介绍

如果要编译的工程比较大,尝试手动去建立、维护Makefile的话,不仅很复杂,而且费时费力,还容易出错,这时使用autotools工具就是一个不错的选择,只要输入工程中的目标文件、依赖文件、文件目录等信息就可以自动生成Makefile。

autotools工具是个系列工具,主要有:aclocal、autoscan、autoconf、autoheader、automake。

下面说一下使用流程,如下:

² 在源代码目录树的最高层运行autoscan,生成configure.scan文件;

² 运行aclocal,生成aclocal.m4文件;

² 运行autoconf,生成configure配置脚本;

² 运行autoheader,生成config.h.in文件;

² 手工编写Makefile.am文件;

² 运行automake,生成Makefile.in;

² 运行配置脚本configure,生成Makefile。

3.3.2、实例

下面结合一个实例来说明如何使用autotools工具。项目中有文件:main.c、test1.c、test2.c、test1.h、test2.h。

² 第一步:运行autoscan

在终端中输入“autoscan”并回车执行,生成configure.scan,该文件是configure.in的原型,而configure.in是autoconf的脚本配置文件。所以在进行下一步工作之前要对configure.scan进行修改,将其重命名为configure.in。configure.scan文件内容如下:

...

AC_PREREQ([2.64])

AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])

AC_CONFIG_SRCDIR([main.c])

AC_CONFIG_HEADERS([config.h])

...

AC_OUTPUT

对configure.scan的内容简要说明如下:

v AC_PREREQ宏声明本文件要求的autoconf版本。

v AC_INIT宏定义软件的名称、版本等信息,其中BUG-REPORT-ADDRESS可以省略。

v AC_CONFIG_SRCDIR宏用来侦测指定的文件是否存在,来确定源码目录的有效性。

v AC_CONFIG_HEADER宏用于生成config.h文件,以便autoheader使用。

修改方法如下:

v 填写AC_INIT宏要定义的内容。

v 添加宏AM_INIT_AUTOMAKE,及定义的内容。

v 添加AC_CONFIG_FILES([Makefile])。

v 在修改好configure.scan文件后,把其改名为configure.in。

这样得到的configure.in文件内容如下:

...

AC_PREREQ([2.64])

AC_INIT(appname, 1.0, panzhh_459@163.com) #修改的宏

AM_INIT_AUTOMAKE(appname, 1.0) #添加的宏

AC_CONFIG_SRCDIR([main.c])

AM_CONFIG_HEADERS([config.h])

...

AC_CONFIG_FILES([Makefile]) #添加的宏

AC_OUTPUT

² 第二步:运行aclocal

在终端中输入“aclocal”并回车执行。该命令根据configure.in的内容生成aclocal.m4文件,该文件主要处理本地的宏定义。

² 第三步:运行autoconf

在终端中输入“autoconf”并回车执行。该命令根据configure.in和aclocal.m4的内容生成configure配置脚本,configure脚本是用来生成Makefile的。

² 第四步:运行autoheader

在终端中输入“autoheader”并回车执行。该命令用来生成config.h.in文件。通常是会从“acconfig.h”文件中复制用户附加的符号定义。因为本例中没有附加的符号定义,所以不需要创建”acconfig.h”文件。

² 第五步:编写Makefile.am

automake需要脚本配置文件Makefile.am,这个文件得手工建立。内容如下:

1 AUTOMAKE_OPTIONS=foreign

2 bin_PROGRAMS=appname

3 appname_SOURCES=main.c test1.c test1.h test2.c test2.h

简单说明:

第一行中AUTOMAKE_OPTIONS用来设置automake的选项。GNU对自己发布的软件有严格的规范,比如必须附带许可证声明文件COPYING等等,否则automake执行时会报错。automake提供了3种软件等级:foreign、gnu和gnits。默认等级是gnu。示例中使用的是foreign,表示只检测必要的文件。

第二行中bin_PROGRAMS定义了要产生的执行文件名。如果产生多个可执行文件,每个文件名要用空格隔开。

第三行中file_SOURCES定义file这个执行程序的依赖文件,其中“file_SOURCES”中的前部分“file”要改写成可执行文件名,即与bin_PROGRAMS定义的名称一直。如果有多个可执行文件,那就要定义相应的file_SOURCES。

² 第六步:执行automake

这一步很重要,automake处理脚本配置文件Makefile.am后,生成Makefile.in。有一些必需的脚本文件,如“install-sh”、“missing”等,可以从automake软件包里复制过来,只需在执行时使用“--add-missing”选项即可。默认的处理方式是创建这些文件的符号链接,如果再加上“--copy”选项则可以使用复制方式。执行的命令格式如下:

# automake --add-missing --copy

² 第七步:执行configure

在终端中输入“./configure”并回车执行,就是执行第三步生成的configure配置脚本,该脚本根据第四步生成的config.h.in和第六步生成的Makefile.in的内容来生成Makefile文件。

autotools工具介绍相关推荐

  1. Linux下autoTools工具集使用介绍

    Author : iStone E-mail : liul.stone@gmail.com Date : 2015-09-19 15:16:38 一 使用autoTools工具集 1.1 什么是aut ...

  2. 软件包管理 之 软件在线升级更新yum 图形工具介绍

    作者:北南南北 来自:LinuxSir.Org 提要:yum 是Fedora/Redhat 软件包管理工具,包括文本命令行模式和图形模式:图形模式的yum也是基于文本模式的:目前yum图形前端程序主要 ...

  3. IDEA IntelliJ 开发工具介绍

    IntelliJ IDEA 开发Java的IDE 官网:https://www.jetbrains.com/ 下面是该工具介绍,有兴趣的可以看下,基本一堆废话: 集成开发环境(IDE,Integrat ...

  4. postman 接口测试工具介绍

    postman 接口测试工具介绍 https://www.cnblogs.com/fly_dragon/p/9186745.html

  5. Java代码缺陷自动分析工具介绍

    Java代码缺陷自动分析工具介绍                                                                                     ...

  6. 77.Linux系统日志,screen工具介绍

    Linux系统日志 日志重要吗?必须的,没有日志我们怎么知道系统状况?没有日志如何排查一个trouble?日志记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到***时** ...

  7. Exchange Server 2003多服务器安装以及管理工具介绍

    Exchange服务器系列课程之二--Exchange Server 2003多服务器安装以及管理工具介绍 http://www.z8soft.com/article/server| 2011年4月1 ...

  8. soapui工具_python接口自动化(四)--接口测试工具介绍(详解)

    简介 "工欲善其事必先利其器",通过前边几篇文章的介绍,大家大致对接口有了进一步的认识.那么接下来让我们看看接口测试的工具有哪些. 目前,市场上有很多支持接口测试的工具.利用工具进 ...

  9. Java新手看招 常用开发工具介绍

    Java新手看招 常用开发工具介绍 Java的应用越来越广泛,学习Java的人也越来越多.学过程序设计的人知道,使用Basic进行程序设计,可以使用QBasic.Visual Basic等开发工具:使 ...

  10. arcgis python工具-使用python制作ArcGIS插件(1)工具介绍

    使用python制作ArcGIS插件(1)工具介绍 by 李远祥 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作.相对于以往9.x系列,addin的无论是 ...

最新文章

  1. Mobx入门之三:Provider inject
  2. 巴克码相关器的verilog HDL设计
  3. python汽车仿真_汽车山羊问题的分析以及Python和MATLAB仿真实验
  4. android String.charAt的使用
  5. YOLOV5+Deepsort行人跟踪初探
  6. 2.C#面向对象基础属性
  7. Android CertificateSource系统根证书的检索和获取
  8. oracle日期基本数据,oracle日期时间函数总结
  9. 沟通管理-输入、输出、工具和技术
  10. Nebula Graph - SpringBoot 操作 Nebula
  11. [置顶] 而立之年——三线城市程序员的年终告白
  12. 华为手机的视频剪辑功能居然这么强大,太实用啦
  13. 看黑客如何在Black Hat 2016上5秒干掉 macOS 系统,“催吐”ATM机| 宅客周刊
  14. 2019-2020年度第2学期课程回顾总结
  15. 使用nose进行python自动化测试
  16. 费马小定理在ACM中的应用
  17. android视频播放器流程图,Android OpenGL ES 10.1 视频播放器
  18. uniapp 实现富文本编辑器【小程序端】
  19. 小白学Java基础案例(二)
  20. 【python debug】could not convert string to float: ‘File‘ got an unexpected keyword argument

热门文章

  1. 完美解决:Could not open the editor: Editor could not be initialized
  2. HCIE-Security Day37:理论学习:信息安全防范与趋势
  3. mysql show命令原理_MySQL show processlist;命令详解
  4. 国外NetDevOps资源工具清单分享
  5. AngularJS中的DOM value与view value
  6. UVA 10529 Dumb Bones 可能性dp 需求预期
  7. java 常见关键字的使用
  8. List转换为数组Array的方法
  9. RoundedUITableView
  10. (转载)程序员文史综合题目一(附答案)