新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > Linux下C编程基础之:使用autotools

Linux下C编程基础之:使用autotools

作者:时间:2013-09-13来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/257148.htm

3.6使用

在上一小节,读者已经了解到了make项目管理器的强大功能。的确,makefile可以帮助make完成它的使命,但要承认的是,编写makefile确实不是一件轻松的事,尤其对于一个较大的项目而言更是如此。那么,有没有一种轻松的手段生成makefile而同时又能让用户享受make的优越性呢?本节要讲的系列工具正是为此而设的,它只需用户输入简单的目标文件、依赖文件、文件目录等就可以轻松地生成makefile了,这无疑是广大用户所希望的。另外,这些工具还可以完成系统配置信息的收集,从而可以方便地处理各种移植性的问题。也正是基于此,现在上的软件开发一般都用来制作makefile,读者在后面的讲述中就会了解到。

3.6.1autotools使用流程

正如前面所言,autotools是系列工具,读者首先要确认系统是否装了以下工具(可以用which命令进行查看)。

n aclocal

n autoscan

n

n autoheader

n automake

使用autotools主要就是利用各个工具的脚本文件以生成最后的makefile。其总体流程是这样的。

n 使用aclocal生成一个“aclocal.m4”文件,该文件主要处理本地的宏定义;

n 改写“configure.scan”文件,并将其重命名为“configure.in”,并使用文件生成configure文件。

接下来,笔者将通过一个简单的hello.c例子带领读者熟悉autotools生成makefile的过程,由于在这过程中会涉及较多的脚本文件,为了更清楚地了解相互之间的关系,强烈建议读者实际动手操作以体会其整个过程。

1.autoscan

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

[root@localhostautomake]#autoscan

autom4te:configure.ac:nosuchfileordirectory

autoscan:/usr/bin/autom4tefailedwithexitstatus:1

[root@localhostautomake]#ls

autoscan.logconfigure.scanhello.c

由上述代码可知autoscan首先会尝试去读入“configure.ac”(同configure.in的配置文件)文件,此时还没有创建该配置文件,于是它会自动生成一个“configure.in”的原型文件“configure.scan”。

2.autoconf

configure.in是autoconf的脚本配置文件,它的原型文件“configure.scan”如下所示:

#-*-Autoconf-*-

#Processthisfilewithautoconftoproduceaconfigurescript.

AC_PREREQ(2.59)

#Thenextoneismodifiedbydavid

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

AC_INIT(hello,1.0)

#Thenextoneisaddedbydavid

AM_INIT_AUTOMAKE(hello,1.0)

AC_CONFIG_SRCDIR([hello.c])

AC_CONFIG_HEADER([config.h])

#Checksforprograms.

AC_PROG_CC

#Checksforlibraries.

#Checksforheaderfiles.

#Checksfortypedefs,structures,andcompilercharacteristics.

#Checksforlibraryfunctions.

AC_CONFIG_FILES([makefile])

AC_OUTPUT

下面对这个脚本文件进行解释。

n 以“#”号开始的行是注释。

n AC_PREREQ宏声明本文件要求的autoconf版本,如本例使用的版本2.59。

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

n AM_INIT_AUTOMAKE是笔者另加的,它是automake所必备的宏,使automake自动生成makefile.in,也同前面一样,PACKAGE是所要产生软件套件的名称,VERSION是版本编号。

n AC_CONFIG_SRCDIR宏用来检查所指定的源码文件是否存在,以及确定源码目录的有效性。在此处源码文件为当前目录下的hello.c。

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

n AC_CONFIG_FILES宏用于生成相应的makefile文件。

n 中间的注释之间可以分别添加用户测试程序、测试函数库、测试头文件等宏定义。

接下来首先运行aclocal,生成一个“aclocal.m4”文件,该文件主要处理本地的宏定义。如下所示:

[root@localhostautomake]#aclocal

再接着运行autoconf,生成“configure”可执行文件。如下所示:

[root@localhostautomake]#autoconf

[root@localhostautomake]#ls

aclocal.m4autom4te.cacheautoscan.logconfigureconfigure.inhello.c

3.autoheader

接着使用autoheader命令,它负责生成config.h.in文件。该工具通常会从“acconfig.h”文件中复制用户附加的符号定义,因为这里没有附加符号定义,所以不需要创建“acconfig.h”文件。如下所示:

[root@localhostautomake]#autoheader

4.automake

这一步是创建makefile很重要的一步,automake要用的脚本配置文件是makefile.am,用户需要自己创建相应的文件。之后,automake工具转换成makefile.in。在该例中,笔者创建的文件为makefile.am,如下所示:

AUTOMAKE_OPTIONS=foreign

bin_PROGRAMS=hello

hello_SOURCES=hello.c

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭