GNUAutotools整理版
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 |
打包文件或目录 |