automake大杂烩

从网上多篇文章综合而来:

(一)完整的从头开始生成:

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

猜你喜欢

转载自mypyg.iteye.com/blog/845925