如何使用autoconf及automake生成Makefile
时间:2010-07-01 来源:星巴
- 创建hello目录,创建以下hello文件于此目录
#include <stdio.h>
int main()
{
printf("Hello, World.\n");
return 0;
} - 执行autoscan,这将产生configure.in的雏形文件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_CONFIG_SRCDIR([hello.c])# Checks for programs.
# 这个宏是必须的,它描述了我们将要生成的软件包的名字及其版本.
# PACKAGE是软件包的名字,VERSION是版本号。当你使用make dist命令时
# 它会给你生成一个类似helloworld-1.0.tar.gz的软件发行包,其中就有对
# 应的软件包的名字和版本号。
AM_INIT_AUTOMAKE(hello,1.0)
# Checks for programs.# 这个宏将检查系统所用的C编译器。
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.# 这个宏是我们要输出的Makefile的名字
AC_OUTPUT(Makefile) - 执行 aclocal 和 autoconf ,分别会产生 aclocal.m4 及 configure 两个档案
- 创建Makefile.am,内容如下
# 这个是automake的选项。在执行automake时,它会检查目录下是否存在标准# GNU软件包中应具备的各种文件,例如AUTHORS、ChangeLog、NEWS等文件。# 我们将其设置成foreign时,automake会改用一般软件包的标准来检查。
AUTOMAKE_OPTIONS= foreign
# 这个是指定我们所要产生的可执行文件的文件名。
# 如果你要产生多个可执行文件,那么在各个名字间用空格隔开
bin_PROGRAMS= hello# 这个是指定产生“helloworld”时所需要的源代码。如果它用到了多个源文# 件,那么请使用空格符号将它们隔开。比如需要helloworld.h,
# helloworld.c那么请写成helloworld_SOURCES= helloworld.h
# helloworld.c。
hello_SOURCES= hello.c
- 执行 automake --add-missing ,Automake 会根据 Makefile.am 档产生一些档案,包含最重要的 Makefile.in
"--add-missing"的意思是add missing standard files to package
最后执行./configure即可生成Makefile.以上所述内容可大体上帮助我们建立一简单的Makefile,但如果要建立更复杂的Makefile则需要深入autoconf及automake的使用方法,或参考其它开源代码中的configure.in及Makefile.am文件