Autotools
1、make命令的基本使用方法
路径变量及默认值(详细版)
路径变量 | 默认值 |
prefix | /usr/local |
exec-prefix | $(prefix) |
sysconfdir | $(prefix)/etc |
bindir | $(exec-prefix)/bin |
libdir | $(exec-prefix)/lib |
includedir | $(prefix)/include |
datarootdir | $(prefix)/share |
datadir | $(datarootdir) |
mandir | $(datarootdir)/man |
infodir | $(datarootdir)/info |
noinst | 不安装 |
topsrcdir | 工程顶层目录 |
topbuilddir | 目标文件顶层目录 |
路径变量及默认值(简版)
路径变量 | 默认值 |
prefix | /usr/local |
bindir | $(prefix)/bin |
libdir | $(prefix)/lib |
datadir | $(prefix)/share |
sysconfdir | $(prefix)/etc |
includedir | $(prefix)/include |
noinst | 不安装 |
topsrcdir | 工程顶层目录 |
topbuilddir | 目标文件顶层目录 |
标准配置变量
CC | C编译器 |
CXX | CXX编译器 |
CFLAGS | C编译选项 |
CXXFLAGS | CXX编译选项 |
LDFLAGS | 链接器选项 |
CPPFLAGS | C/CXX编译器预处理参数 |
以上变量,都可以通过 [./configure XXX=value] 的形式直接对其初始化。
make常用参数
命令 | 注释 |
make | 编译,等同于make all |
make install | 安装 |
make install-strip | 安装编译好的程序、库、头文件到系统中 |
make uninstall | 卸载 |
make clean | 删除make生成的文件 |
make distclean | 深度删除 |
make check | 测试 |
make installcheck | 安装测试 |
make dist | 打包 |
2、GNUAutotools的结构
配置步骤(原始):
autoscan
mv configure.scan configure.ac
vi configure.ac
aclocal
autoheader
autoconf
vi makefile.am
automake
./configure
配置步骤(简化):
Autoscan
vi configure.ac
vi makefile.am
autoreconf –install
./configure
3、编写configure.ac
用[]括起来的字段表示为一个字符串
AC_PREREQ([2.63])
#检测autoconf版本,此版本号仅向下兼容
AC_INIT([工程名称], [工程版本], [DEBUG邮箱])
#项目初始化宏
AC_CONFIG_SRCDIR([路径/源文件名])
#安全性检查,保证configure脚本运行在正确的目录中
AC_CONFIG_AUX_DIR([目录])
#配置辅助脚本位置,如install-sh和depcomp等
AC_CONFIG_HEADERS([config.h])
#生成标准的config.h文件(也可是其他头文件)
AM_INIT_AUTOMAKE([选项...])
#使用automake工具
-Wall 打开全部警告
-Werror 把警告当成错误处理
-foreign 宽松的GNU标准
-1.11.1 automake的最低版本
-dist-bzip2 使用bzip2打包源码
-tar-ustar 使用ustar格式创建tar文档
AC_PROG_CC,AC_PROG_CXX,AC_PROG_F77等
#编译器检查
AC_PROG_SED,AC_PROG_YACC,AC_PROG_LEX等
#工具检查
AC_CHECK_PROGS([变量], [程序], [默认程序])
#如果程序存在,则变量=程序,否则变量=默认程序
AC_DEFINE(VARIABLE, VALUE, DESCRIPTION)
#定义宏,输出到config.h中
AC_MSG_ERROR([错误信息], [EXIT-STATUS])
#打印错误信息并退出,EXIT-STATUS为退出状态
AC_MSG_WARN([警告信息])
#打印警告信息
AC_DEFINE([宏类型],[宏名],[注释])
#在config.h中定义宏
AC_SUBST([变量名],[变量值])
#在makefile中定义变量
AC_CHECK_LIB([A库], [A函数],[A程序],[B程序])
#检查A库中是否有A函数,如果有执行A程序,否则执行B程序
AC_CHECK_HEADERS([HEADERS...])
#检查头文件inc/h1.h中是否有HAVE_INC_H1_H宏(不喜欢用)
AC_CONFIG_FILES([makefile])
#要生成的文件,多个makefile以空格或换行分隔
AC_OURPUT
#输出并结束
4、编写makefile.am
语法:
选项_位置_要生成的目标 = 需要的代码或库或对象文件
option_where_PRIMARY = targets ...
PRIMARY | 说明 |
_PROGRAMS | 目标是可执行文件 |
_LIBRARIES | 目标是静态库 |
_LTLIBRARIES | 目标是动态库(libtools) |
_HEADES | 目标是头文件 |
_SCRIPTS | 目标是脚本 |
_DATA | 目标是数据 |
路径变量 | 默认值 |
prefix | /usr/local |
bindir | $(prefix)/bin |
libdir | $(prefix)/lib |
datadir | $(prefix)/share |
sysconfdir | $(prefix)/etc |
includedir | $(prefix)/include |
noinst | 不安装 |
topsrcdir | 工程顶层目录 |
topbuilddir | 目标文件顶层目录 |
编译配置 | 说明 |
_SOURCES | 目标依赖的源文件 |
_LIBADD | 生成库需要的其他库 |
_LDADD | 生成可执行程序需要的库 |
_LDFLAGS | 链接选项 |
_CFLAGS | C编译选项 |
_CXXFLAGS | CXX编译选项 |
其他配置 | 说明 |
SUBDIRS | 递归处理子目录 |
EXTRA_DIST | 打包文件或目录 |