一、简介

在Linux下,编译某个程序,使用Makefile, 但对于Makefile来讲,有一定的语法;同时编译过程,也对外部环境有一定的依赖,如需要依赖某些特定的库才能编译通过。

Autoconf 及Automake 这两个软件是帮助程序开发者轻松产生 Makefile,同时在配置过程中,提示用户来安装缺失的环境。

 

二、示例过程如下

 

1、源文件

hello.c

#includeextern int test(void);

int main(void)
{
	printf("In %s, Hello World.\n", __FILE__);

	test();

	return 0;
}

 

test.c

 

#includeint test()
{
	printf("In test FUNC.....\n");
	return 0;
}

 

2、通过autscan命令,产生 configure.scan文件,修改为configure.ac

root@wangxinyu-PC:/home/wangxinyu/work/temp/test_automake# autoscan 
root@wangxinyu-PC:/home/wangxinyu/work/temp/test_automake# ls
autoscan.log  configure.scan  hello.c  test.c
root@wangxinyu-PC:/home/wangxinyu/work/temp/test_automake# mv configure.scan configure.ac
root@wangxinyu-PC:/home/wangxinyu/work/temp/test_automake# cat configure.ac 
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AM_INIT_AUTOMAKE(tt, 0.0) # Add , automake
AC_CONFIG_SRCDIR([hello.c])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.
AC_CONFIG_FILES([Makefile]) # Add, Create Makefile
AC_OUTPUT
root@wangxinyu-PC:/home/wangxinyu/work/temp/test_automake#

 

3、执行aclocal,产生aclocal.m4 配置文件

root@wangxinyu-PC:/home/wangxinyu/work/temp/test_automake# aclocal

 

4、执行autoconf, 产生configure文件

root@wangxinyu-PC:/home/wangxinyu/work/temp/test_automake# autoconf

 

5、执行autoheader 产生config.h.in

root@wangxinyu-PC:/home/wangxinyu/work/temp/test_automake# autoheader

 

6、创建Makefile.am文件

root@wangxinyu-PC:/home/wangxinyu/work/temp/test_automake# vi Makefile.am
  1 AUTOMAKE_OPTION=foreign
  2 bin_PROGRAMS=tt
  3 tt_SOURCES=hello.c test.c

 

 

7、根据情况,创建一些常用的文档文件NEWS README AUTHORS ChangeLog

touch NEWS README AUTHORS ChangeLog

 

8、根据Makefile.am产生Makefile.in

automake --add-missing

 

9、执行./configure 生成Makefile

./configure 
make


root@wangxinyu-PC:/home/wangxinyu/work/temp/test_automake# make install
make[1]: Entering directory '/home/wangxinyu/work/temp/test_automake'
 /usr/bin/mkdir -p '/usr/local/bin'
  /usr/bin/install -c tt '/usr/local/bin'
make[1]: Nothing to be done for 'install-data-am'.
make[1]: Leaving directory '/home/wangxinyu/work/temp/test_automake'
root@wangxinyu-PC:/home/wangxinyu/work/temp/test_automake# tt
In hello.c, Hello World.
In test FUNC.....

 

三、总结

制作过程:

 

autoconf automake使用_autoconf automake

生成Makefile过程:

autoconf automake使用_autoconf automake_02

 

综合

 

autoconf automake使用_autoconf automake_03

注意:通过autoreconf命令,来解决由于制作过程的automake版本,与最终使用用户版本不一致的问题

autoreconf --force --install 
./configure xxxx xxx xxx xxx(配置参数)