Chinaunix首页 | 论坛 | 博客
  • 博客访问: 123197
  • 博文数量: 31
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 361
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-11 15:38
文章分类

全部博文(31)

文章存档

2008年(31)

我的朋友

分类: LINUX

2008-03-29 20:40:18

今天学习了linux中利用autotool系列工具生成makefile,下面简要的做一下总结:

Makefile是干什么的?

makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,其中也可以执行操作系统的命令。
makefile
带来的好处就是——“自动化编译,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。还有一个好处就是,一旦某个文件被修改了,再对工程编译时候,不用编译所有的文件,编译工具会根据makefile判断哪个文件被修改了,只编译与它有关的文件。

而手动编写makefile很繁,所以autotools就应运而生,它可以实现makefile的自动生成

autotools的使用流程

autoscan->aclocal->autoconf-> automake->configure

 

helloworld为例加以说明:

1)新建helloworld.c,并修改代码如下:

   int main(int argc,char** argv)

   {

        printf("hello world!");

   }

2)autoscan:autoscan:生成configure.scan

3)编辑configure.scan,并重命名为configure.in

  内容如下:

 

#      -*- Autoconf -*-

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

AC_PREREQ(2.59)

#The next one is modified by sunq

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

AC_INIT(hello,1.0)

# The next one is added by author

AM_INIT_AUTOMAKE(hello,1.0)

AC_CONFIG_SRCDIR([hello.c])

# 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_CONFIG_FILES([Makefile])

AC_OUTPUT

4aclocal:生成aclocal.m4

5) autoconf:生成configure

6)vim makefile.am新建makefile.am并编辑内容如下:

  AUTOMAKE_OPTIONS=foreign

  bin_PROGRAMS=helloworld

  helloworld_SOURCES=helloworld.c

7atuomake --add-missing:生成makefile.in

8./configure生成makefile

这样helloworldmakefile就生成了,make就可生成可执行程序了。

 

autotools各步详解:

1autoscan

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

2.configure.in

configure.inautoconf的脚本配置文件,文件的内容是一些宏,这些宏经过autoconf 处理后会变成检查系统特性、环境变量、软件必须的参数的shell脚本。configure.in文件中的宏的顺序并没有规定,但是你必须在所有宏的最前面和最后面分别加上AC_INIT宏和AC_OUTPUT宏。其中:

1以“#”号开始的行为注释。

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

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

4M_INIT_AUTOMAKE是笔者另加的,它是automake所必备的宏,也同前面一样,PACKAGE是所要产生软件套件的名称,VERSION是版本编号。

5AC_CONFIG_SRCDIR宏用来侦测所指定的源码文件是否存在,来确定源码目录的有

效性。在此处为当前目录下的hello.c

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

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

4.aclocal

它生成一个“aclocal.m4文件,该文件主要处理本地的宏定义。

5.autoconf

生成“configureshell文件。configure是一个脚本,它能设置源程序来适应各种不同的操作系统平台,并且根据不同的系统来产生合适的Makefile,从而可以使你的源代码能在不同的操作系统平台上被编译出来。

6.makefile.am

 

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

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

·  hello_SOURCES定义“hello”这个执行程序所需要的原始文件。如果”hello”这个程序是由多个原始文件所产生的,则必须把它所用到的所有原始文件都列出来,并用空格隔开。例如:若目标体“hello”需要“hello.c”、“sunq.c”、“hello.h”三个依赖文件,则定义hello_SOURCES=hello.c sunq.c hello.h。要注意的是,如果要定义多个执行文件,则对每个执行程序都要定义相应的file_SOURCES

7.automake - -add-missing

生成“makefile.in”文件,在这里使用选项“—adding-missing”可以让automake自动添加有一些必需的脚本文件。

8.运行configure

在这一步中,通过运行自动配置设置文件configure,把Makefile.in变成了最终的Makefile

 

 

 

 

 
阅读(1071) | 评论(0) | 转发(0) |
0

上一篇:Linux起步(三)

下一篇:C++的多态性

给主人留下些什么吧!~~