从网上多篇文章综合而来:
(一)完整的从头开始生成:
1.进入源码目录,执行autoscan,得到configure.scan文件。对此文件进行修改,然后改名为configure.ac。修改后的configure.scan文件如下:
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
# 修改模块名,版本号,bug report为自己所需的内容
AC_INIT(am_test, 1.0, none)
# !!!手工添加此句以支持automake
AM_INIT_AUTOMAKE(am_test, 1.0)
# 一个有效的源代码文件。无需改动
AC_CONFIG_SRCDIR([src/t1.h])
AC_CONFIG_HEADER([config.h])
# Checks for programs.
# 检测g++编译器。如果代码中有c++代码scan时会自动添加
AC_PROG_CXX
# 检测gcc编译器。如果代码中有c代码scan时会自动添加
AC_PROG_CC
# Checks for libraries.
# 检测pthread库是否存在
# AC_CHECK_LIB(库名称,需要库中的函数,[如果找到,[如果没找到]])
AC_CHECK_LIB(pthread, pthread_create, HAVE_PTHREAD=yes,HAVE_PTHREAD=no)
if test "$HAVE_PTHREAD" = "no"; then
AC_MSG_ERROR([pthread is required])
fi
PTHREAD_LIBS=-lpthread
# AC_SUBST 定义的变量可以在Makefile.am中使用
AC_SUBST(PTHREAD_LIBS)
# 检测使用pkg-config管理的库是否存在
# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [action-if-found], [action-if-not-fount])
# 使用检测png库作为例子
PNG_VER=0.2
PKG_CHECK_MODULES(PNG, libpng >= $PNG_VER, HAVE_PNG=yes, HAVE_PNG=no)
AC_SUBST(PNG_LIBS)
AC_SUBST(PNG_CFLAGS)
if test "$HAVE_PNG" = "no"; then
AC_MSG_ERROR([png = $PNG_VER is required])
fi
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
# Config file name
AC_CONFIG_FILES(Makefile)
AC_OUTPUT
2.运行aclocal -> 处理本地宏定义
3.autoconf -> 生成configure文件
4.autoheader -> 生成config.h.in文件
5.创建Makefile.am文件。automake会根据此文件生成Makefile.in文件
# 要生成的可执行文件名
bin_PROGRAMS= am_exe
# 生成此文件所需要的源文件
am_exe_SOURCES= src/main.c \
src/t1.c \
src/t2.cpp \
src/tt.c
# 要额外链接的静态库
am_exe_LDADD=
# 要额外链接的动态库。PTHREAD_LIBS, PNG_LIBS在configure.ac中使用AC_SUBST()指定
am_exe_LDFLAGS=$(PTHREAD_LIBS) $(PNG_LIBS)
# 传给gcc的编译标志
am_exe_CFLAGS=$(PNG_CFLAGS)
# 传给g++的编译标志
am_exe_CXXFLAGS=$(PNG_CFLAGS)
6.touch README NEWS AUTHORS ChangeLog 创建gnu标准的文件。如果不加这些文件就要在Makefile.am最后增加:AUTOMAKE_OPTIONS=foreign
7.automake --add-missing --copy 根据Makefile.am 生成Makefile.in文件
8.运行configure文件根据Makefile.in生成实际的Makefile
9.编写autogen.sh,然后chmod a+x autogen.sh
aclocal
autoheader
#libtoolize --force #如果使用libtool
automake --add-missing --copy
autoconf
(二)新加代码文件:
修改Makefile.am,然后执行autogen.sh
(三)新加库引用:
修改configure.ac,增加库的检测
执行autogen.sh
(一)完整的从头开始生成:
1.进入源码目录,执行autoscan,得到configure.scan文件。对此文件进行修改,然后改名为configure.ac。修改后的configure.scan文件如下:
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
# 修改模块名,版本号,bug report为自己所需的内容
AC_INIT(am_test, 1.0, none)
# !!!手工添加此句以支持automake
AM_INIT_AUTOMAKE(am_test, 1.0)
# 一个有效的源代码文件。无需改动
AC_CONFIG_SRCDIR([src/t1.h])
AC_CONFIG_HEADER([config.h])
# Checks for programs.
# 检测g++编译器。如果代码中有c++代码scan时会自动添加
AC_PROG_CXX
# 检测gcc编译器。如果代码中有c代码scan时会自动添加
AC_PROG_CC
# Checks for libraries.
# 检测pthread库是否存在
# AC_CHECK_LIB(库名称,需要库中的函数,[如果找到,[如果没找到]])
AC_CHECK_LIB(pthread, pthread_create, HAVE_PTHREAD=yes,HAVE_PTHREAD=no)
if test "$HAVE_PTHREAD" = "no"; then
AC_MSG_ERROR([pthread is required])
fi
PTHREAD_LIBS=-lpthread
# AC_SUBST 定义的变量可以在Makefile.am中使用
AC_SUBST(PTHREAD_LIBS)
# 检测使用pkg-config管理的库是否存在
# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [action-if-found], [action-if-not-fount])
# 使用检测png库作为例子
PNG_VER=0.2
PKG_CHECK_MODULES(PNG, libpng >= $PNG_VER, HAVE_PNG=yes, HAVE_PNG=no)
AC_SUBST(PNG_LIBS)
AC_SUBST(PNG_CFLAGS)
if test "$HAVE_PNG" = "no"; then
AC_MSG_ERROR([png = $PNG_VER is required])
fi
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
# Config file name
AC_CONFIG_FILES(Makefile)
AC_OUTPUT
2.运行aclocal -> 处理本地宏定义
3.autoconf -> 生成configure文件
4.autoheader -> 生成config.h.in文件
5.创建Makefile.am文件。automake会根据此文件生成Makefile.in文件
# 要生成的可执行文件名
bin_PROGRAMS= am_exe
# 生成此文件所需要的源文件
am_exe_SOURCES= src/main.c \
src/t1.c \
src/t2.cpp \
src/tt.c
# 要额外链接的静态库
am_exe_LDADD=
# 要额外链接的动态库。PTHREAD_LIBS, PNG_LIBS在configure.ac中使用AC_SUBST()指定
am_exe_LDFLAGS=$(PTHREAD_LIBS) $(PNG_LIBS)
# 传给gcc的编译标志
am_exe_CFLAGS=$(PNG_CFLAGS)
# 传给g++的编译标志
am_exe_CXXFLAGS=$(PNG_CFLAGS)
6.touch README NEWS AUTHORS ChangeLog 创建gnu标准的文件。如果不加这些文件就要在Makefile.am最后增加:AUTOMAKE_OPTIONS=foreign
7.automake --add-missing --copy 根据Makefile.am 生成Makefile.in文件
8.运行configure文件根据Makefile.in生成实际的Makefile
9.编写autogen.sh,然后chmod a+x autogen.sh
aclocal
autoheader
#libtoolize --force #如果使用libtool
automake --add-missing --copy
autoconf
(二)新加代码文件:
修改Makefile.am,然后执行autogen.sh
(三)新加库引用:
修改configure.ac,增加库的检测
执行autogen.sh