AutoMake使用教程
1. 下载所需软件
yum install make autoconf
自动编译 automake
-
执行 autoscan 命令,生成 autoscan.log、configure.scan 文件
-
将configure.scan文件重命名为configure.ac,对configure.ac文件做如下修改:
- 修改AC_INIT里面的参数
# FULL-PACKAGE-NAME: 程序名称 # VERSION:版本号 # BUG-REPORT-ADDRESS:bug上报地址 AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
- 添加宏AM_INIT_AUTOMAKE
- 在AC_OUTPUT后添加输出文件Makefile
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
完成后如下所示:
# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT(example, 1.0, example@gmail.com) AM_INIT_AUTOMAKE([-Wall]) AC_CONFIG_SRCDIR([main.cpp]) AC_CONFIG_HEADERS([config.h]) # Checks for programs. AC_PROG_CXX AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_OUTPUT(Makefile)
aclocal
aclocal
执行 aclocal 命令,会生成 aclocal.m4 文件与缓冲文件夹 autom4te.cache
autoconf
autoconf
执行命令生成configure
autoheader
autoheader
执行命令生成config.h.in文件,之后编写Makefile.am文件,内容如下:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=example
example_SOURCES=main.cpp
automake
automake -a
执行命令后,会生成depcomp、install-sh、missing三个必须文件(autotools软连接)以及由Makefile.am生成的Makefile.in文件
PS: automake -a 命令只创建了软连接,autoreconf --install命令可以代替 autoconf、autoheader、automake三个命令,并且depcomp、install-sh、missing文件是拷贝安装的,不只是软连接
configure
./configure
执行configure程序,即可生成Makefile文件
- 当修改Makefile.am文件后,重新执行configure命令即可
- 当修改了configure.ac文件,此时需重新执行一次autoconf
- make distclean命令执行后,会将Makefile文件也清除掉
configure.ac宏定义说明
宏 | 作用 | 示例 |
---|---|---|
AC_PREREQ | autoconf最低版本 | AC_PREREQ([2.69]) |
AC_INIT | 初始化包信息 | AC_INIT(example, 1.0, example@gmail.com) |
AC_CONFIG_SRCDIR | 通过检测目录中必定存在的文件来判断目录是否存在 | AC_CONFIG_SRCDIR([main.cpp]) |
AC_CONFIG_HEADERS | 生成config.h文件保存configure.ac定义的宏,此文件可被源文件包含 | AC_CONFIG_HEADERS([config.h]) |
AM_INIT_AUTOMAKE | automake必须的宏 | AM_INIT_AUTOMAKE([]) |
AC_PROG_LIBTOOL | 使得configure能够支持–enable-shared、–disable-shared、–enable-static、–disable-static、–with-pic和–without-pic参数 | AC_PROG_LIBTOOL |
AC_PROG_INSTALL | 生成安装脚本 install-sh | |
AC_PROG_CXX | 自动检测要使用的C++编译器 | AC_PROG_CXX |
AC_PROG_CC | 自动检测要使用的C编译器 | AC_PROG_CC |
AC_CHECK_HEADERS | 检测系统头文件是否存在 | AC_CHECK_HEADERS([sys/socket.h netinet/in.h arpa/inet.h]) |
AC_OUTPUT | AC_OUTPUT(Makefile) |
Makefile.am宏定义说明
宏 | 作用 | 示例 |
---|---|---|
AUTOMAKE_OPTIONS | AUTOMAKE_OPTIONS = foreign | |
bin_PROGRAMS | 所要生成的可执行文件 | bin_PROGRAMS = xxx |
xxx_SOURCES | 生成xxx执行文件所需要的源文件 | xxx_SOURCES |
CXXFLAGS | c++编译选项 | |
CFLAGS | c编译选项 | |
INCLUDES | 链接是所需要的头文件 | INCLUDES = -I/usr/include |
LDADD | 链接时所需要的库文件 | |
noinst_HEADERS | 表示头文件只参与编译,而不进行安装 | noinst_HEADERS = xxx.h |
include_HEADERS | 头文件会安装到系统中 | include_HEADERS = xxx.h |
SUBDIRS | 指定需要递归automake的子文件夹,即存在Makefile.am的子文件夹 | SUBDIRS = src dir_a dir_b dir_c |
DISTCLEAN_FILES | 执行make distclean时候需要删除的文件 |