GNU Autotools简单举例

    Linux下,工程管理器 Make 可用于自动编译、链接程序的实用工具。我们要做的是写一个makefile 文件,然后用make命令来编译、链接程序。Makefile的作用就是让编译器知道要编译一个文件需要依赖其他的哪些文件。这里我们就是要用GNU Autotools来收集系统配置信息并自动生成Makefile文件。


GNU Autotools指的就是下面的五个工具:

 (1)aclocal

 (2)autoscan

 (3)autoconf

 (4)autoheader

 (5)automake

Autotools的使用流程

第一步:手工编写Makefile.am这个文件

第二步:在源代码目录树的最高层运行autoscan。然后手动修改configure.scan文件,并改名为configure.in。

第三步:运行aclocal,它会根据configure.ac的内容生成aclocal.m4文件。

第四步:运行autoconf,它根据configure.ac和aclocal.m4的内容生成configure这个配置脚本文件。

第五步:运行automake --add-missing,它根据Makefile.am的内容生成Makefile.in。

第六步:运行./configure,它会根据Makefile.in的内容生成Makefile这个文件。

    获得Makefile文件后,我们就可以使用make程序来管理我们的工程了 

    首先有一个简单的工程,其目录和文件结构如下所述:工程的最高层目录test中有一个hello.c文件和lib子目录。在lib目录中有一个print.h、print.c文件。


(1)hello.c

#include"lib/print.h"
#include<stdio.h>
int main(void)
{
    print();
}
(2)print.c
#include"print.h"
#include<stdio.h>
void print(void)
{
    printf("hello world!\n");
}
(3)print.h
#ifndef __PRINT_H
#define __PRINT_H

void print(void);

#endif

    然后为该工程编写automake的输入配置脚本Makefile.am。

    test目录下的Makefile.am的内容:

noinst_LIBRARIES = libprint.a
libprint_a_SOURCES =print.c print.h

lib目录下的Makefile.am的内容:

SUBDIRS=lib
bin_PROGRAMS=hello
hello_SOURCES=hello.c
include_HEADERS=./lib/print.h
hello_LDADD=./lib/libprint.a

开始使用aututools:步骤如下:

(1)      输入并执行"autoscan"命令,生成configure.scan文件,修改configure.scan文件的内容如下(图中选中的位置为需要添加或修改的地方),改完之后将文件重命名为configure.in

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

AC_PREREQ(2.57)
#AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AC_INIT(hello,1.0)             #在此行内容中设置当前软件包信息 
AM_INIT_AUTOMAKE(hello,1.0)    #automake 所必备的宏,必须添加(所要产生软件的名称,版本编号)
AC_PROG_RANLIB                 #需要加入的内容,因为使用了静态库
AC_CONFIG_SRCDIR([hello.c])    #源文件名
AC_CONFIG_HEADER([config.h])   #config 文件

# Checks for programs.
AC_PROG_CC                     #检查系统可用的C 编译器,若源代码是用C 写的就需要这个宏。

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile
                 lib/Makefile])
AC_OUTPUT                      #输出文件名为 makefile

(2)输入并执行"aclocal"命令

(3)输入并执行"autoconf"命令

(4)输入并执行"autoheader"命令

(5)输入并执行"automake --add-missing"命令

(6)输入并执行"./configure"命令,即可生成Makefile文件

(7)输入并执行"make "命令,编译文件,生成 hello 文件

(8)" ./hello "执行hello文件,运行结果如下:



内容整理索引来自:Aillo,发布于2008.04.14


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值