GNU autotools 学习

学习资料:Autotools Tutorial ,以及对这个学习文档的一些记录,一下图片都是来自该文档。

为了:1,Porabale Packages

同样功能函数名称的不同,同样功能的库的名字的不同,以及头文件的不同,使得package 的移植成了大的问题。

2,Uniform Build

统一 编译方式、方法等。

使用configure。

Configure 工具用来收集不同系统所使用的不同的库,工具,以及系统支持的宏定义等信息,然后提供了统一的build 包的方法——make 。如图所示,configure产生了makefile文件用来make

 

configure功能

 

Configure 之后提供的make install 命令会自动按照GNU 文件组织结构进行程序的安装,

GNU 标准文件结构

<!--[if !vml]--><!--[endif]-->

GNU bulid system

 

这个图是不是似曾相识呢,整个linux 系统的文件组织方式不是也是这个样子的吗,如图:

 

linux文件树

<!--[if !vml]--><!--[endif]-->

这里可以更加深刻的看出linuxwindows 的文件组织方式的不同,windows 下安装软件都是安装到一个文件夹下面的,而linux 下的安装确是按照软件功能组件的不同安装到不同的文件夹下面的。

Build 方法:

./configure && make && make install ,通过configure 可以指定软件包的安装前缀prefix ,还可以指定编译器等。例如:./configure –prefix ~/usr 就是指定安装前缀是home 下的usr 而不是usr 下的local 了。

 

如何configure

可以看到configure 需要两个文件,即:Makefile.inconfig.h.in ,那么这两个文件有时如何得到的呢。这就是需要autotools 的地方了。

autoreconf功能

可以看出,我们需要autoreconf 这个工具,还需要configure.acMakefile.am 这两种文件。

那么如果不用autoreconf 这个工具,该怎么作呢。

 

automake && autoconf

<!--[if !vml]--><!--[endif]-->

这个图片显示了其实autoreconf 这个工具其实是几个工具的集合,他们分别是aclocal (产生本地宏定义的工具)automake (产生Makefile.in) 的工具,以及autoconf 这个产生configure 文件的工具。

下面通过一个例子详细讲解一下:

AC_INIT([amhello], [1.0], [bug-automake@gnu.org])

AM_INIT_AUTOMAKE([-Wall -Werror foreign])

AC_PROG_CC

AC_CONFIG_HEADERS([config.h])

AC_CONFIG_FILES([

 Makefile

 src/Makefile

])

AC_OUTPUT

这里面为什么要用'['amhello 等字符括起来呢,是因为AC_INIT 是一个宏定义, 是一个延迟宏展开的符号,只有到最后一层才能将宏定义展开,比如:

#DEFINE MET AB A met B

#DEFINE N1 na

#DEFINE N2 nb

MET (N1,N2) 的结果是na met nb ,但是如果N1 的定义是#define na,nc ,那么宏展开后将是什么呢?

将是,na met nc 当然这里define 不是c 语言里的define ,而是想AC_INIT 那样的定义。所以 可以保证宏展开的正确性。

再说configure.in 文件,AM_INIT_AUTOMAKE 这是一个为automake 使用的宏,其中foreign 是为了告诉,这个程序包不是遵循GUN 规范的程序,从而避免编译过程出错。 AC_CONFIG_FILES是告诉configure输出什么文件的。再来看看Makefile.am文件的书写格式:

makefile.am文件结构

<!--[if !vml]--><!--[endif]-->

按照这种规则,hello简单程序的Makefile.am的内容就是:

bin_PROGRAMS = hello

hello_SOURCES = main.c

我想意思是很明确的了,将hello这个程序安装到prefix/bin目录下,并且hello的源程序是main.c。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值