【半原创半转载】autotool和mankefile.am生成makefile

 

GNU Autotools的用法

在较大项目中, 如果手动维护Makefile, 那将是一件复杂并痛苦的事情. 那么, 有没有一种轻松的手段生成Makefile呢? autotools系列工具正是在这样的呼声中诞生的. 它只需用户输入简单的目标文件, 依赖文件, 文件目录等就可以轻松地生成Makefile了. 另外, 这些工具还可以完成系统配置信息的收集, 从而可以方便地处理各种移植性问题.

autotools是系列工具, 它含有:aclocal 、autoscan 、autoconf 、autoheader 、automake
1.介绍  
大部分时候,你从网上下载了一个开放源代码的软件,在解压后,你一般会敲入以下三个命令来编译和安装你的程序:
1)./configure
2)make
3)make install
其中,configure脚本分析你的系统以找到合适的工具和库,make是真正用来编译构建软件的工具,make install来安装软件。在开放源代码世界,configure脚本获得了广泛的使用,它使从源代码安装软件变得非常容易。

2.什么是GNU autotools
GNU autotools主要包括下面三个工具:
   Autoconf – 这个工具用来生成configure脚本。就像前面提到的,这个脚本主要用来分析你的系统以找到合适的工具和库。譬如:你的系统的C编译器是“cc”还是“gcc”?
   Automake – 这个工具用来生成Makefiles。它需要使用到Autoconf提供的信息。譬如,如果Autoconf检测到你的系统使用“gcc”,那Makefile就使用gcc作为C编译器。反之,如果找到“cc”,那就使用“cc”。
   Libtools – 这个工具创建共享库。它是平台无关的。

3. autotools 使用流程

下面用一个简单的hello.c程序, 演示autotools的使用流程. hello.c如下:

wangsheng@pc01:~/work/train/make/automake$ ls

hello.c

wangsheng@pc01:~/work/train/make/automake$ cat hello.c

#include

int main()

{  printf("Hello, autotools!\n");

  return 0;

}

(1) 使用autoscan命令自动生成configure.scan文件

它会在给定目录及其子目录树中检查源文件, 若没有给出目录, 就在当前目录及其子目录树中进行检查.它会搜索源文件以寻找一般的移植性问题并创建一个文件”configure.scan”, 该文件就是接下来autoconf要用到的”configure.in”原型.

wangsheng@pc01:~/work/train/make/automake$ autoscan

wangsheng@pc01:~/work/train/make/automake$ ls

autoscan.log  configure.scan  hello.c

(2)将configure.scan重命名为configure.in, 并做适当修改
configure.scan的内容:

wangsheng@pc01:~/work/train/make/automake$ cat configure.scan

# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.65])

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

//修改为AC_INIT(hello,1.0)

AC_INIT_AUTOMAKE(hello,1.0)//源文件中没有,增加此行

AC_CONFIG_SRCDIR([hello.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

将configure.scan重命名为configure.in

wangsheng@pc01:~/work/train/make/automake$ mv configure.scan configure.in

根据具体情况, 适当修改, 以下加粗部分是修改的内容:

说明:

以”#”号开始的行为注释

AC_PREREQ宏声明本文要求的autoconf版本, 如本例中的版本 2.65

AC_INIT宏用来定义软件的名称和版本等信息, 在本例中省略了BUG-REPROT-ADDRESS, 一般为作者的E-mail

AM_INIT_AUTOMAKE是手动添加的, 它是automake所必备的宏, 也同前面一样, PACKAGE是所要产生软件套件的名称,VERSION是版本编号.

AC_CONFIG_SCRDIR宏用来侦测所指定的源码文件是否存在, 来确定源码目录的有效性. 在此处指当前目录下hello.c

AC_CONFIG_FILES宏用于生成相应的Makefile文件.

(3) 运行aclocal命令,生成”aclocal.m4″文件, 该文件主要处理本地的宏定义

wangsheng@pc01:~/work/train/make/automake$ aclocal

wangsheng@pc01:~/work/train/make/automake$ ls

aclocal.m4 autom4te.cache  autoscan.log  configure.in  hello.c

(4)运行autoconf命令生成configure可执行文件

(5)运行autoheader命令,生成config.h.in文件

该工具通常会从“acconfig.h”文件中复制用户附加的符号定义。本例中没有附加的符号定义,所以不需要创建“acconfig.h”文件

(6) 运行automake命令, 生成Makefile.in文件
这一步是创建Makefile很重要的一步, automake要用的脚本配置文件是Makefile.am, 用户需要自己创建相应的文件. 之后, automake工具将自动转换成Makefile.in 本例中, 创建的文件为Makefile.am, 内容如下:

wangsheng@pc01:~/work/train/make/automake$ cat Makefile.am

AUTOMAKE_OPTIONS=foreign

bin_PROGRAMS=hello

hello_SOURCES=hello.c

说明:

其中的AUTOMAKE_OPTIONS为设置automake的选项. 由于GNU对自己发布的软件有严格的规范, 比如必须附带许可证声明文件COPYING等, 否则automake执行时会报错. automake提供了3中软件等级:foreign, gnu和gnits, 供用户选择. 默认级别是gnu. 在本例中, 使用了foreign等级, 它只检测必须的文件.

bin_PROGRAMS定义要产生的执行文件名. 如果要产生多个执行文件, 每个文件名用空格隔开

hello_SOURCES 定义”hello”这个可执行程序所需的原始文件. 如果”hello”这个程序是由多个源文件所产生的, 则必须把它所用到的所有源文件都列出来, 并用空格隔开. 如果要定义多个可执行程序, 那么需要对每个可执行程序建立对应的file_SOURCES.

在这里使用”–add-missiing”选项可以让automake自动添加一些必须的脚本文件.

 

链接:http://blog.ossxp.com/2010/04/954/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值