momo zone

调核人的blog

autoconf 和 automake 生成 Makefile 文件

之前都是手写Makefile,现在了解一下autoconf和automake吧:

拿个代码目录看一下:

├── LICENSE
├── README.md
└── src
        ├── include
        │        ├── dpu.h
        │        ├── icmp.h
        │        ├── list.h
        │        ├── operation.h
        │        ├── probe.h
        │        └── report.h
        ├── main.c
        ├── icmp.c
        └── operation.c

整体流程如下:

automake_autoconf

 

 

所需要的软件如下:

1. GNU Automake 

2. GNU Autoconf 

3. GNU m4 

4. perl 

5. GNU Libtool (如果你需要产生 shared library) 

 

1. 在dpu目录下执行autoscan生成configure.scan文件

2. 修改configure.scan如下内容:

修改AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])为

AC_INIT([dpu],[0.1],[lp007819@hotmail.com]) 也就是项目名称,版本号,开发者邮件

在AC_INIT后面新增一行

AM_INIT_AUTOMAKE

修改AC_CONFIG_HEADERS([config.h]) 为

AC_CONFIG_HEADERS(config.h)

在# Checks for libraries.后面插入

AC_PROG_RANLIB

更改AC_CONFIG_FILES([Makefile])为

AC_CONFIG_FILES([Makefile src/Makefile]) 因为在src下还要生成一个Makefile

将configure.scan重命名为configure.in

3. 在dpu目录下新建文件Makefile.am

编辑如下内容:

SUBDIRS=src
CURRENTPATH=$(PWD)
INCLUDES=-I$(CURRENTPATH)/src/include
export INCLUDES

在src目录下新建文件Makefile.am

编辑如下内容:

bin_PROGRAMS=dpu
dpu_SOURCES=main.c icmp.c operation.c
dpu_LDFLAGS=-pthread -D_GNU_SOURCE
DEFS+=-pthread -D_GNU_SOURCE

 

4. 在dpu目录下执行autoheader生成config.h.in

5. 在dpu目录下touch如下文件

AUTHORS

COPYING

ChangeLog

INSTALL

LICENSE

NEWS

README

6. 从/usr/share/automake-XX/将如下文件copy到dpu目录下:

compile

depcomp

install-sh

missing

7. 在dpu目录下执行aclocal,它会扫描configure.ac或configure.in生成aclocal.m4文件,该文件中的宏会被autoconf读取

8. 在dpu目录下执行autoconf生成configure

9. 在dpu目录下执行automake生成Makefile.in

 

这里只是记录了configure的产生方法和过程,但如果真的要让项目编译具有更好的移植性需要对configure.in做深入的修改。

参考资料:http://www.ibm.com/developerworks/cn/linux/l-makefile/

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: