autoconf使用

简介

Autoconf是一个用于生成shell脚本的工具,可自动配置源码包以适应多种类Posix的系统,产生的配置脚本通常叫做configure。Autoconf的目标是为每个用户提供可移植的配置。

Autoconf解决了一个重要的问题 - 可靠地发现系统特定的构建和运行时信息。为此,GNU项目开发了一套集成实用程序来完成Autoconf的工作:GNU构建系统,其最重要的组件是Autoconf,Automake和Libtool。

使用以下命令来安装我们需要的组件:

sudo apt-get install autoconf automake libtool

使用automake,程序开发人员只需要写一些简单的 含有预定义宏的 文件,由autoconf根据一个宏文件生成configure,由automake根据另一个宏文件生成Makefile.in,再使用configure依据Makefile.in来生成一个符合惯例的 Makefile.

使用autoconf的最终目的是生成能够根据不同系统生成Makefile的configure文件,一般情况下我们需要准备如下内容:

  1. 源码
  2. configure.ac
  3. Makefile.am

然后通过如下一系列命令可以生成configure文件:

aclocal; autoconf; autoheadr;automake --add-missing;

使用

在test目录下有一个main.c文件,其内容如下:

ha@ha-virtual-machine:~/test$ ls
main.c
ha@ha-virtual-machine:~/test$ cat main.c
#include <stdio.h>int main(){printf("This is src\n");return 0;
}

我们使用autoconf来对其进行编译构建。

  1. 使用autoscan扫描当前目录,生成configure.scan文件;可以看到当前目录结构如下:

    ha@ha-virtual-machine:~/test$ autoscan
    ha@ha-virtual-machine:~/test$ ls
    autoscan.log  configure.scan  main.c
    ha@ha-virtual-machine:~/test$ cat configure.scan
    #                                               -*- Autoconf -*-
    # Process this file with autoconf to produce a configure script.AC_PREREQ([2.71])
    AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
    AC_CONFIG_SRCDIR([main.c])
    AC_CONFIG_HEADERS([config.h])# Checks for programs.
    AC_PROG_CC# Checks for libraries.# Checks for header files.# Checks for typedefs, structures, and compiler characteristics.# Checks for library functions.AC_OUTPUT
    
    • AC_PREREQ声明本文件要求的 autoconf 版本。

    • AC_INIT 宏用来定义软件的名称和版本等信息,本例写成:AC_INIT(Hello, 1.0)

    • 这里省略了 BUG-REPORT-ADDRESS 参数,它是可选项,一般写成作者的邮件地址

    • AC_CONFIG_SRCDIR 宏通过侦测所指定的源码文件是否存在,来确定源码目录的有效性。可以选择源码目录中的任何一个文件作为代表, 宏参数中使用 `[ ]’,是为了表明其中的字符串是一个整体。

    • AC_CONFIG_HEADER 宏用于生成 config.h 文件,里面存放 configure 脚本侦测到的信息如果程序需要使用其中的定义,就在源码中加入#include <config.h>

    • 其他的一些宏是标准的侦测过程,可以保留不动修改configure.scan为configure.ac,同时修改项目编译相关内容;

  2. 将configure.scan重命名为configure.ac,然后修改其内容,仅需添加AM_INIT_AUTOMAKE(1.0);

    #                                               -*- Autoconf -*-
    # Process this file with autoconf to produce a configure script.AC_PREREQ([2.71])
    AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
    AM_INIT_AUTOMAKE(1.0)
    AC_CONFIG_SRCDIR([main.c])
    AC_CONFIG_HEADERS([config.h])# Checks for programs.
    AC_PROG_CC# Checks for libraries.# Checks for header files.# Checks for typedefs, structures, and compiler characteristics.# Checks for library functions.
    
  3. 执行aclocal;

    autoconf 是 用来生成自动配置软件源代码脚本(configure)的 工具.configure脚本能独立于autoconf运行,且在 运行的 过程中,不需要用户的 干预.
    要生成configure文件,你必须告诉autoconf如何找到你所用的 宏.方式是 使用aclocal程序来生成你的 aclocal.m4.

    aclocal根据configure.in文件的 内容,自动生成aclocal.m4文件.aclocal是 一个perl 脚本程序,它的 定义是 :“aclocal - create aclocal.m4 by scanning configure.ac”.

  4. 执行autoconf生成configure;

    autoconf从configure.in这个列举编译软件时所需要各种参数的 模板文件中创建configure.
    autoconf需要GNU m4宏处理器来处理aclocal.m4,生成configure脚本.
    m4是 一个宏处理器.将输入拷贝到输出,同时将宏展开.宏可以是 内嵌的 ,也可以是 用户定义的 .除了可以展开宏,m4还有一些内建的 函数,用来引用文件,执行命令,整数运算,文本操作,循环等.m4既可以作为编译器的 前端,也可以单独作为一个宏处理器.

  5. 执行autoheader生成config.h.in;

  6. 将编译规则写入Makfile.am;

    AUTOMAKE_OPTIONS=foreign
    bin_PROGRAMS=test
    test_SOURCES=main.c
    
  7. 执行automake生成Makefile.in;

    automake --add-missing
    

    automake会根据你写的 Makefile.am来自动生成Makefile.in.
    Makefile.am中定义的 宏和目标,会指导automake生成指定的 代码.例如,宏bin_PROGRAMS将导致编译和连接的 目标被生成.

  8. 最终当你执行configure时会根据Makefile.in生成Makefile;

reference

  1. https://blog.csdn.net/qq_22660775/article/details/88975529
  2. https://www.laruence.com/2009/11/18/1154.htmls

autoconf使用相关推荐

  1. centos 6.8 x86_64下autoconf版本升级到2.69

    安装软件时提示说需要Autoconf 2.64或更高的版本 首先查看当前版本 rpm -qf /usr/bin/autoconf autoconf-2.63-5.1.el6.noarch 卸载当前版本 ...

  2. PHP动态编译出现Cannot find autoconf

    在安装完PHP后,想动态编译PHP的memcache扩展库 cd memcache-2.2.5/ /usr/local/webserver/php/bin/phpize ./configure --w ...

  3. CentOS下的Autoconf和AutoMake(实践篇) 2

    阅读过<Linux下的Autoconf和AutoMake(理论篇)>之后,进入到实践环节. 实验环境:CentOS release 6.7 (Final) x64 1.检查一下这4个工具是 ...

  4. 使用autoconf完成编译配置

    使用过开源C/C++项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install, 使用起来很方便,不像平时自己写代码,要手写一堆复杂的Makefi ...

  5. 例解 autoconf 和 automake 生成 Makefile 文件

    http://www.ibm.com/developerworks/cn/linux/l-makefile/ 生成 Makefile 的来龙去脉 首先进入 project 目录,在该目录下运行一系列命 ...

  6. Linux移植之auto.conf、autoconf.h、Mach-types.h的生成过程简析

    在Linux移植之make uImage编译过程分析中分析了uImage文件产生的过程,在uImage产生的过程中,顺带还产生了其它的一些中间文件.这里主要介绍几个比较关键的文件 1.linux-2. ...

  7. linux下使用automake、autoconf生成configure文件

    一.生成configure过程中各文件之间的关系图 二.详细介绍 autoscan: 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是con ...

  8. autoconf和automake的安装与使用

    http://hi.baidu.com/luohuazju/blog/item/4e2d930802a2d5d962d986d2.html http://xunet.blog.51cto.com/13 ...

  9. LLVM3.8停止了旧Windows版本,取消Autoconf,改进Clang

    LLVM团队宣布了LLVM的发布版本,其中包含了一些主要的弃用和新的C语言API头文件以及Clang3.8. \\ LLVM在3.8版本中减去了对Windows XP和Vista的支持,因此需要至少W ...

  10. Linux下autoconf和automake使用

    Linux下autoconf和automake使用 转自:http://hi.baidu.com/liuyanqiong/blog/item/0a6f0ad9d28e1d3d32fa1c7b.html ...

最新文章

  1. 那些年我们一起追过的Shell Script
  2. 2018 Multi-University Training Contest 7 - Sequence
  3. 剑桥管理学老哥的研究生申请和人生道路规划观念
  4. 请把下面的列表转换为html,在python中将列表转换为HTML表的最简单方法是什么?...
  5. python程序设计题怎么写_《Python语言程序设计基础》第1章程序练习题
  6. mysql 本地登录失败 - 已授权
  7. jquery 上下无缝滚动
  8. Ajax用法返回Json
  9. BZOJ3091 城市旅行
  10. react根据中文获取拼音_react下将输入的汉字转化为拼音
  11. 2021-11-21 使用for循环打印出大写字母ascll码对照表。
  12. 【Python123】汽车迷
  13. ThinkpadX220 windows10 博通bcm94352hmb的蓝牙连接音箱播放声音断断续续的解决方案
  14. iOS Mac安装ipa文件的几种方法
  15. win10系统更新后打开chrome浏览器几秒后自动闪退
  16. Windows 10发布日期提速,将于7月29日上市
  17. IllegalArgumentException: Unmatched braces in the pattern.
  18. ActiveMQ从入门到精通(全)
  19. 找出1000之内的所有完数
  20. 零中频接收机频率转换图_【新品情报站】俄罗斯产VisAir HF DDC/DUC SDR 收发信机视频|接收机|转换器|ddc|天线|调谐器...

热门文章

  1. Windows系统的命令窗口
  2. 使用Python操作Excel图表之 为最后一个数据点添加数据标签
  3. Aspose.Words控件支持DOC,OOXML,RTF,HTML,OpenDocument,PDF,XPS,EPUB和其他格式
  4. Python对Excel文件多表对多表之间的匹配(两种不同表头)——之json版
  5. 一维数组、二维数组的大小、长度与偏移
  6. android中setClickable,setEnabled,setFocusable的含义及区别
  7. vue自定义指令directives同时传递多个参数
  8. MOS管RC缓冲电路相关参数计算方法
  9. 小成开发日记-----利用Python在互动吧网站自动抢票实战分析
  10. ICPR 2018 MTWI挑战赛开启 开放首个网络图片数据集