【探索wireshark】 使用autoconf, automake等自动生成Makefile

// 所有原创文章转载请注明作者及链接
//
blackboycpp(AT)gmail.com
// QQ群: 135202158

 

 

     无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或 make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以轻而易举的理顺各个源文件之间纷繁复杂的相互关系。

 

     但是如果通过查阅make的帮助文档来手工编写Makefile,对任何程序员都是一场挑战。幸而有GNU 提供的autoconf及automake这两套工具使得编写Makefile不再是一个难题。

 

     本文将介绍如何利用 GNU autoconf 及 automake 这两套工具来协助我们自动产生 Makefile文件,并且让开发出来的软件可以像大多数源码包那样,只需"./configure", "make","make install" 就可以把程序安装到系统中。

 

    首先,把ethereal-0.2.0源代码解压到一个目录,并删除其中已存在的和Makefile有关的文件。然后依次执行以下命令:

 

1. autoscan

说明:autoscan命令来帮助我们根据目录下的源代码生成一个configure.in的模板文件。

将生成的configure.scan修改为configure.in,
然后编译configure.in,修改内容为:
----------------------------------------------------------------
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.65])
AC_INIT(ethereal.c)
AM_INIT_AUTOMAKE(ethereal, 0.2.0)
AC_CONFIG_SRCDIR([capture.h])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.
AC_CHECK_HEADERS([fcntl.h netinet/in.h string.h strings.h sys/ioctl.h sys/socket.h sys/time.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_SIZE_T

# Checks for library functions.
AC_FUNC_MALLOC
AC_CHECK_FUNCS([socket strchr strrchr])

AC_OUTPUT(Makefile)

----------------------------------------------------------------

 

2. aclocal

说明:aclocal根据configure.in文件的内容,自动生成aclocal.m4文件。aclocal是一个perl 脚本程序,它的定义是:“aclocal - create aclocal.m4 by scanning configure.ac”。

 

3. autoheader

说明:autoheader 用来产生模板头文件,以便于后面生成的configure文件的使用。

 

4. 执行autoconf

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

 

5. 新建文件Makefile.am,修改内容如下:

----------------------------------------------------------------
AUTOMAKE_OPTIONS = foreign
INCLUDES = `pkg-config --cflags gtk+-2.0 libgnomeui-2.0`
LIBS = `pkg-config --libs gtk+-2.0 libgnome-2.0`
bin_PROGRAMS = ethereal
ethereal_SOURCES= /
    capture.c    /
    ethereal.c   /
    file.c       /
    menu.c       /
    packet.c     /
    packet-arp.c /
    packet-ip.c  /
    packet-tcp.c /
    packet-udp.c /
    capture.h    /
    config.h     /
    ethereal.h   /
    etypes.h     /
    file.h       /
    menu.h       /
    packet.h
----------------------------------------------------------------

 

说明:

AUTOMAKE_OPTIONS :设置automake的选项。Automake主要是帮助开发GNU软件的人员来维护软件,所以在执行automake时,会检查目录下是否存在标准GNU软件中应具备 的文件,例如'NEWS'、'AUTHOR'、'ChangeLog'等文件。设置foreign 时,automake会改用一般软件的标准来检查。
INCLUDES :程序中用到的头文件,使用 pkg-config工具来自动配置
LIBS :程序中用到的库文件,使用 pkg-config工具来自动配置
bin_PROGRAMS :最终生成的可执行文件名称,可以有多个可执行文件,中间用空格隔开
ethereal_SOURCES :生成上个选项中列出的二进制文件所需的源文件,每个文件单独列出

 

6. 执行automake --add-missing

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

 

7. 执行./configure

 

至此,已经自动生成了Makefile,如果源码没有错误,就可以编译了。
可以使用以下命令:
make :编译
make install :安装
make clean :清理临时文件
make dist :打包成标准的软件包

 


本文引用了以下文章的部分内容,在此表示衷心感谢:
【1】sirniu - http://blog.sina.com.cn/s/blog_5252fdda0100b5fi.html
【2】杨小华,苏春艳 - https://www.ibm.com/developerworks/cn/linux/l-makefile/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值