产生configure需要三个文件
configure.ac
Makefile.am
src/Makefile.am
(参考我的另外两篇文章编写configure.ac和编写Makefile.am)
编辑好这几个文件就可以产生configure脚本,和config.h.in,Makefile.in,src/Makefile.in
configure.ac主要初始化一些信息,检查编译器,检查头文件,检查库,检查函数等。
下面是一个configure.ac样本
AC_INIT([amhello], [1.0], [bug-report@address])
AM_INIT_AUTOMAKE([foreign -Wall -Werror])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT
AC_INIT初始化工程名,版本,bug报告地址一个emall
AM_INIT_AUTOMAKE 初始化automake
AC_PROG_CC检查编译器
AC_CONFIG_HEADERS产生config.h.in
AC_CONFIG_FILES 产生Makefile
AC_OUTPUT 输出这些文件 configure,config.h.in,Makefile
Makefile.am 指定建造目标程序,库还是动态库等
下面看一个例子
根目录下的Makefile.am
SUBDIRS=src
SUBDIRS表示建造路径为src,去到src下寻找Makefile.am
src/Makefile.am
bin_PROGRAMS=hello
hello_SOURCES=main.c
bin_PROGRAMS = hello表示建造一个应用程序hello,bin表示安装路径,PROGRAMS表示建造的是一个程序。
hello_SOURCES=main.c表示建造hello需要的源文件。
有两这些文件你输入下面的命令将会产生configure,config.h.in等文件
autoreconf –install
注意autoreconf其实会为你以一种正确的顺序去启动一系列的工具。
具体这些过程和用到的工具见下文
工具 | 描述 |
---|---|
autoconf | 从configure.ac创建configure |
autoheader | 从configure.ac创建config.h.in |
autoreconf | 以正确的顺序运行全部命令 |
autoscan | 搜索源代码中的移植问题,最终configure.ac中没提及的宏 |
autoupdate | 跟新configure.ac中废弃的宏 |
ifnames | 收集源代码中的#if/#ifdef/…并且标示定义 |
autom4te | autoconf的核心,它驱动M4通过下面的工具实现功能。 |
automake | 从Makefile.am和configure.ac创建Makefile.in文件 |
aclocal | 扫描configure.ac中的第三方宏,并且标示定义到aclocal.m4中 |
大多数时候不需要记住这些复杂的命令,只需要执行autoreconf –install就可以了。
configure相关的产生关系图
资料来源
autotools.pdf