目录结构
最顶层目录名用模块名称,这里是test
源文件放在模块下的src子目录里,这里是test/src
创建源文件
在src下创建test.c
创建Makefile模板
创建test/Makefile.am,内容如下:
SUBDIR=src
表示其下有一个src子目录,若有多个子目录,用空格分开
创建test/src/Makefile.am,内容如下:
bin_PROGRAMS=test
test_SOURCES=test.c
am扩展名是automake的简称,它是 automake用来产生Makefile.in文件的模板。
创建autoconf的模板
在test里运行sudo autoscan,生成文件autoscan.log和configure.scan,将configure.scan重命名为configure.in:
sudo mv configure.scan configure.in
打开configrure.in并作修改:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.65])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([src/test.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
src/Makefile])
AC_OUTPUT
修改成:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.65])
AC_INIT(test, 0.1, xxx@xxx.com)
AC_CONFIG_SRCDIR([src/test.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE(test, 0.1)
# 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
src/Makefile])
AC_OUTPUT
复制所用到的宏
sudo aclocal
生成aclocal.m4文件和autom4te.cache文件夹
生成配置头文件的模板
sudo autoheader
生成config.h.in文件
创建几个必要的文件
README
NEWS
AUTHORS
ChangeLog
生成Makefile.in和所需要的脚本
sudo automake -a
生成configure脚本
sudo autoconf
autoconf调用m4(即macro)展开configure.in中的宏,生成configure脚本。
生成最终的Makefile
sudo ./configure
configure有以下两个常用的参数:
--prefix用来指定安装目录,Linux下默认的安装目录是/usr/local
--host用于交叉编译,比如x86的PC机上编译在ARM板上运行的程序
如:sudo ./configure --host=arm-linux
编译
sudo make
安装
sudo make install
发布软件包
sudo make dist或sudo make distcheck
生成test-0.1.tar.gz软件包