autoconf使用
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文件,一般情况下我们需要准备如下内容:
- 源码
- configure.ac
- 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来对其进行编译构建。
使用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,同时修改项目编译相关内容;
将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.
执行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”.
执行autoconf生成configure;
autoconf从configure.in这个列举编译软件时所需要各种参数的 模板文件中创建configure.
autoconf需要GNU m4宏处理器来处理aclocal.m4,生成configure脚本.
m4是 一个宏处理器.将输入拷贝到输出,同时将宏展开.宏可以是 内嵌的 ,也可以是 用户定义的 .除了可以展开宏,m4还有一些内建的 函数,用来引用文件,执行命令,整数运算,文本操作,循环等.m4既可以作为编译器的 前端,也可以单独作为一个宏处理器.执行autoheader生成config.h.in;
将编译规则写入Makfile.am;
AUTOMAKE_OPTIONS=foreign bin_PROGRAMS=test test_SOURCES=main.c
执行automake生成Makefile.in;
automake --add-missing
automake会根据你写的 Makefile.am来自动生成Makefile.in.
Makefile.am中定义的 宏和目标,会指导automake生成指定的 代码.例如,宏bin_PROGRAMS将导致编译和连接的 目标被生成.最终当你执行configure时会根据Makefile.in生成Makefile;
reference
- https://blog.csdn.net/qq_22660775/article/details/88975529
- https://www.laruence.com/2009/11/18/1154.htmls
autoconf使用相关推荐
- centos 6.8 x86_64下autoconf版本升级到2.69
安装软件时提示说需要Autoconf 2.64或更高的版本 首先查看当前版本 rpm -qf /usr/bin/autoconf autoconf-2.63-5.1.el6.noarch 卸载当前版本 ...
- PHP动态编译出现Cannot find autoconf
在安装完PHP后,想动态编译PHP的memcache扩展库 cd memcache-2.2.5/ /usr/local/webserver/php/bin/phpize ./configure --w ...
- CentOS下的Autoconf和AutoMake(实践篇) 2
阅读过<Linux下的Autoconf和AutoMake(理论篇)>之后,进入到实践环节. 实验环境:CentOS release 6.7 (Final) x64 1.检查一下这4个工具是 ...
- 使用autoconf完成编译配置
使用过开源C/C++项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install, 使用起来很方便,不像平时自己写代码,要手写一堆复杂的Makefi ...
- 例解 autoconf 和 automake 生成 Makefile 文件
http://www.ibm.com/developerworks/cn/linux/l-makefile/ 生成 Makefile 的来龙去脉 首先进入 project 目录,在该目录下运行一系列命 ...
- Linux移植之auto.conf、autoconf.h、Mach-types.h的生成过程简析
在Linux移植之make uImage编译过程分析中分析了uImage文件产生的过程,在uImage产生的过程中,顺带还产生了其它的一些中间文件.这里主要介绍几个比较关键的文件 1.linux-2. ...
- linux下使用automake、autoconf生成configure文件
一.生成configure过程中各文件之间的关系图 二.详细介绍 autoscan: 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是con ...
- autoconf和automake的安装与使用
http://hi.baidu.com/luohuazju/blog/item/4e2d930802a2d5d962d986d2.html http://xunet.blog.51cto.com/13 ...
- LLVM3.8停止了旧Windows版本,取消Autoconf,改进Clang
LLVM团队宣布了LLVM的发布版本,其中包含了一些主要的弃用和新的C语言API头文件以及Clang3.8. \\ LLVM在3.8版本中减去了对Windows XP和Vista的支持,因此需要至少W ...
- Linux下autoconf和automake使用
Linux下autoconf和automake使用 转自:http://hi.baidu.com/liuyanqiong/blog/item/0a6f0ad9d28e1d3d32fa1c7b.html ...
最新文章
- 那些年我们一起追过的Shell Script
- 2018 Multi-University Training Contest 7 - Sequence
- 剑桥管理学老哥的研究生申请和人生道路规划观念
- 请把下面的列表转换为html,在python中将列表转换为HTML表的最简单方法是什么?...
- python程序设计题怎么写_《Python语言程序设计基础》第1章程序练习题
- mysql 本地登录失败 - 已授权
- jquery 上下无缝滚动
- Ajax用法返回Json
- BZOJ3091 城市旅行
- react根据中文获取拼音_react下将输入的汉字转化为拼音
- 2021-11-21 使用for循环打印出大写字母ascll码对照表。
- 【Python123】汽车迷
- ThinkpadX220 windows10 博通bcm94352hmb的蓝牙连接音箱播放声音断断续续的解决方案
- iOS Mac安装ipa文件的几种方法
- win10系统更新后打开chrome浏览器几秒后自动闪退
- Windows 10发布日期提速,将于7月29日上市
- IllegalArgumentException: Unmatched braces in the pattern.
- ActiveMQ从入门到精通(全)
- 找出1000之内的所有完数
- 零中频接收机频率转换图_【新品情报站】俄罗斯产VisAir HF DDC/DUC SDR 收发信机视频|接收机|转换器|ddc|天线|调谐器...
热门文章
- Windows系统的命令窗口
- 使用Python操作Excel图表之 为最后一个数据点添加数据标签
- Aspose.Words控件支持DOC,OOXML,RTF,HTML,OpenDocument,PDF,XPS,EPUB和其他格式
- Python对Excel文件多表对多表之间的匹配(两种不同表头)——之json版
- 一维数组、二维数组的大小、长度与偏移
- android中setClickable,setEnabled,setFocusable的含义及区别
- vue自定义指令directives同时传递多个参数
- MOS管RC缓冲电路相关参数计算方法
- 小成开发日记-----利用Python在互动吧网站自动抢票实战分析
- ICPR 2018 MTWI挑战赛开启 开放首个网络图片数据集