Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1679708
  • 博文数量: 206
  • 博客积分: 1450
  • 博客等级: 上尉
  • 技术积分: 2285
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-11 11:38
个人简介

学习永无止境!!

文章分类

全部博文(206)

文章存档

2022年(5)

2019年(3)

2018年(8)

2017年(32)

2016年(7)

2015年(13)

2014年(44)

2013年(24)

2011年(6)

2010年(17)

2009年(46)

2008年(1)

分类: LINUX

2009-02-05 15:25:08

使用 autotools 生成包含多文件的 Makefile

    1.实验目的

    通过使用autotools生成包含多文件的Makefile,进一步掌握autotools的正确使用方法。
同时,掌握Linux下安装软件的常用方法。

    2.实验过程

  (1)在原目录下新建文件夹auto。
  (2)在目录下建立两个代码文件“hello.c”和“hello.h”。
  (3)使用autoscan生成configure.scan。
  (4)编辑configure.scan,修改相关内容,并将其重命名为configure.in。
  (5)使用aclocal生成aclocal.m4。
  (6)使用autoconf生成configure。
  (7)使用autoheader生成config.in.h。
  (8)编辑Makefile.am。
  (9)使用automake生成Makefile.in。
  (10)使用configure生成Makefile。
  (11)使用make生成hello可执行文件,并在当前目录下运行hello查看结果。
  (12)使用makeinstall将hello安装到系统目录下,并运行,查看结果。
  (13)使用makedist生成hello压缩包。
  (14)解压hello压缩包。
  (15)进入解压目录。
  (16)在该目录下安装hello软件。

    3.实验步骤

  (1)mkdir./auto。
  (2)建立hello.c和hello.h。 

#hello.h

     #include <stdio.h>

#include "hello.h"

     int main()

     {

             printf("Hello automake!\n");

     }

(3)命令:autoscan。
(4)使用Vi编辑configure.scan为:

# -*- Autoconf -*-



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




AC_PREREQ(2.59)
AC_INIT(hello, 1.0)

AM_INIT_AUTOMAKE(hello,1.0)

AC_CONFIG_SRCDIR([hello.h])

AC_CONFIG_HEADER([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(Makefile)

下面对这个脚本文件进行解释。
      以“#”号开始的行为注释。
     AC_PREREQ 宏声明本文件要求的 autoconf 版本,如本例使用的版本 2.59。
    AC_INIT 宏用来定义软件的名称和版本等信息,在本例中省略了 BUG-REPORT-ADDRESS,
一般为作者的E-mail。
     AM_INIT_AUTOMAKE 是笔者另加的,它是 automake 所必备的宏,也同前面一样,
PACKAGE 是所要产生软件套件的名称,VERSION 是版本编号。
     AC_CONFIG_SRCDIR 宏用来侦测所指定的源码文件是否存在,来确定源码目录的有
    效性。在此处为当前目录下的hello.c。
     AC_CONFIG_HEADER 宏用于生成 config.h 文件,以便 autoheader 使用。
     AC_CONFIG_FILES 宏用于生成相应的 Makefile 文件。
     中间的注释间可以添加分别用户测试程序、测试函数库、测试头文件等宏定义。
(5)保存退出,并重命名为configure.in。
(6)运行:aclocal。
生成“configure”可执行文件。
(7)运行:autoconf,并用ls查看是否生成了configure可执行文件。
(8)运行:autoheader。
 它负责生成config.h.in文件。该工具通常会从“acconfig.h”
文件中复制用户附加的符号定义,因此此处没有附加符号定义,所以不需要创建“acconfig.h”
文件。
(9)用Vi编辑Makefile.am文件为:

AUTOMAKE_OPTIONS=foreign

bin_PROGRAMS=hello

hello_SOURCES=hello.c hello.h

下面对该脚本文件的对应项进行解释。
     其中的 AUTOMAKE_OPTIONS 为设置 automake 的选项。由于 GNU(在第 1 章中已
经有所介绍)对自己发布的软件有严格的规范,比如必须附带许可证声明文件COPYING等,
否则automake执行时会报错。automake提供了3种软件等级:foreign、gnu和gnits,让用户
选择采用,默认等级为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。

(10)运行:automake —adding-missing。
这一步是创建 Makefile 很重要的一步,automake 要用的脚本配置文件是 Makefile.am,
用户需要自己创建相应的文件。之后,automake工具转换成Makefile.in。
在这里使用选项“—adding-missing”可以让automake自动添加有一些必需的脚本文件。
(11)运行:./configure。
通过运行自动配置设置文件 configure,把 Makefile.in 变成了最终的Makefile。
(12)运行:make。
(13)运行:./hello,查看结果是否正确。
(14)运行:makeinstall。
(15)运行:hello,查看结果是否正确。
(16)运行:makedist。
(17)在当前目录下解压hello-1.0.tar.gz:tar–zxvfhello-1.0.tar.gz。
(18)进入解压目录:cd./hello-1.0。
(19)下面开始Linux下常见的安装软件步骤:./configure。
(20)运行:make。
(21)运行:./hello(在正常安装时这一步可省略)。
(22)运行:makeinstall。
(23)运行:hello,查看结果是否正确。
4.实验结果
能够正确使用autotools生成Makefile,并且能够安装成功短小的Hello软件。

阅读(2207) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~