目录
project
|
|-- Makefile.am [项目根目录 Makefile.am]
|
|-- include [include子目录]
| |---Makefile.am [项目子目录 Makefile.am]
| |---xxx.h[头文件]
|
|-- src [src子目录]
| |---Makefile.am [项目子目录 Makefile.am]
| |---xxx.c [ c文件]
| |---test.c [ test c文件]
第一步: autoscan
产生 configure.scan文件,mv 为configure.ac或者configure.in文件
修改文件内容
#AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_INIT([xxx], [1.0]) # name和version
AC_CANONICAL_TARGET # 必须在 AM_INIT_AUTOMAKE之前
AM_INIT_AUTOMAKE #AC_INIT 可为file ,AM_INIT_AUTOMAKE()可添加 [FULL-PACKAGE-NAME], [VERSION]
AC_CONFIG_SRCDIR([src/test.c]) #检查文件是否存在
AC_CONFIG_HEADERS([config.h])
AC_PROG_CC #C编译
AM_PROG_CC_C_O
AC_PROG_LIBTOOL #检查libtool
AC_PROG_INSTALL
AC_CHECK_HEADERS([memory.h stdlib.h string.h]) #check
AC_CHECK_FUNCS([memset]) #check
subdirs=" #子目录
include
src
"
AC_SUBST(subdirs) # 设置输出变量 AC_OUTPUT后shell变量 供Makefile.am使用
AC_CONFIG_FILES([Makefile # 要生成的文件 AC_CONFIG_HEADERS 配置输出头文件,
include/Makefile # AC_CONFIG_COMMANDS 配置输出命令,
src/Makefile]) # AC_CONFIG_LINKS配置输出链接
AC_OUTPUT #输出
第二步 libtoolize
生成 ltmain.sh。需要用libtool生成共享库使用
第三步: aclocal 生成aclocal.m4,autoconf 生成configure, autoheader 生成config.h.in
第四步: 创建Makefile.am文件, 执行automake -a (automake --add-missing)
project层 Makefile.am
SUBDIRS = @subdirs@
EXTRA_DIST = #EXTRA_DIST 用于添加除源码外的文件到dist包
README*
include层 Makefile.am
include_HEADERS = xxx.h
src层 Makefile.am
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS= xxx # 可执行文件
xxx_SOURCES=xxx.c ../include/xxx.h test.c #源文件
xxx_CPPFLAGS = -I ../include/ #flags
执行automake -a 报错, automake --add-missing 也报错
Makefile.am: required file `./NEWS' not found
Makefile.am: required file `./README' not found
Makefile.am: required file `./AUTHORS' not found
Makefile.am: required file `./ChangeLog' not found
手动创建 touch NEWS README AUTHORS ChangeLog
执行automake -a后 生成Makefile.in文件
第五步:./configure 生成Makefile
命令及文件