AUTO

1,所必需的软件:autoconf/automake/m4/perl/libtool



autoconf是一个用于生成可以自动地配置软件源码包,用以适应多种UNIX类系统的shell脚本工具,其中autoconf需要用到 m4,便于生成脚本。


m4 是 POSIX 标准中的一部分,所有版本的 UNIX 下都可用。虽然这种语言可以单独使用,但大多数人需要 m4 仅仅是因为 GNU autoconf 中的 “configure” 脚本依赖它。



{

    POSIX,全称为可移植性操作系统接口,是一种关于信息技术的IEEE标准


内存管理:

进程内存锁定,内存映像文件,共享工具

内存锁定和内存映像文件以页的方式定义。

执行者可以根据页大小的规范限制和排列锁定和映像范围。

页大小,以字节为单位,是一个可配置系统变量。默认是1B。

}




autoconf 是一个用于生成可以自动地配置软件源码包,用以适应多种UNIX类系统的shell脚本工具,其中autoconf需要用到m4,便于生成脚本。

automake是一个从Makefile.am文件自动生成Makefile.in的工具。为了生成Makefile.in,automake还需用到perl,由于automake创建的发布完全遵循GNU标准,所以在创建中不需要perl。

libtool是一款方便生成各种程序库的工具。



目前automake支持三种目录层次:flat、shallow和deep。

1) flat指的是所有文件都位于同一个目录中。

就是所有源文件、头文件以及其他库文件都位于当前目录中,且没有子目录。Termutils就是这一类。

2) shallow指的是主要的源代码都储存在顶层目录,其他各个部分则储存在子目录中。

就是主要源文件在当前目录中,而其它一些实现各部分功能的源文件位于各自不同的目录。automake本身就是这一类。

3) deep指的是所有源代码都被储存在子目录中;顶层目录主要包含配置信息。

就是所有源文件及自己写的头文件位于当前目录的一个子目录中,而当前目录里没有任何源文件。 GNU cpio和GNU tar就是这一类。





生成makefile的来龙去脉

首先进入project目录,该目录下运行一系列命令,创建和修改几个文件,就可以生成符合该平台的makefile,操作过程如下

1) 运行autoscan命令  source code ------autoscan------>configure.scan

2)将configure.scan文件重命名为configure.in,并修改configure.in文件

3)在project目录下新建Makefile.am文件,并在core和shell目录下也新建makefile.am文件

4)在project目录下新建NEWS、 README、 ChangeLog 、AUTHORS文件

5) 将/usr/share/automake-1.X/目录下的depcomp和complie文件拷贝到本目录下

6) 运行aclocal命令

7) 运行autoconf命令

8) 运行automake -a命令

9) 运行./confiugre脚本




configure.in的八股文

当我们利用autoscan工具生成configure.sacn文件时,我们需要将configure.scan重命名为configure.in文件。configure.in调用一系列autoconf宏来测试程序需要的或用到的特性是否存在,以及这些特性的功能

下面我们就来目睹一下configure.scan的庐山真面目

# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AC_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_HEADER([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# FIXME: Replace `main' with a function in `-lpthread':
AC_CHECK_LIB([pthread], [main])
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT
每个configure.scan文件都是以AC_INIT开头,以AC_OUTPUT结束



AC_INIT
 测试程序
 测试函数库
 测试头文件
 测试类型定义
 测试结构
 测试编译器特性
 测试库函数
 测试系统调用
AC_OUTPUT

现在就开始修改该文件,修改后如下:

#                                -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
 
AC_PREREQ(2.59)
AC_INIT(test, 1.0, normalnotebook@126.com)
AC_CONFIG_SRCDIR([src/ModuleA/apple/core/test.c])
AM_CONFIG_HEADER(config.h)
AM_INIT_AUTOMAKE(test,1.0)
 
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# FIXME: Replace `main' with a function in `-lpthread':
AC_CHECK_LIB([pthread], [pthread_rwlock_init])
AC_PROG_RANLIB
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT([Makefile
         src/lib/Makefile
         src/ModuleA/apple/core/Makefile
         src/ModuleA/apple/shell/Makefile
         ])

其中要将AC_CONFIG_HEADER([config.h])修改为:AM_CONFIG_HEADER(config.h),并加入AM_INIT_AUTOMAKE(test,1.0)

由于我们的测试程序是基于多线程的程序,并且要加入AC_PROG_RANLIB,不然运行autogen命令时会出错。在AC_OUTPUT输入要创建的Makefile文件名








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值