4.初始化和输出文件
4.1 初始化 configure¶
AC_INIT (package, version, [bug-report], [tarname], [url])¶
第一个要执行的宏。设置程序名、版本号、联系方式...。他们都应该是静态的参数,不能是shell参数、引用或者新行,但是可以通过m4计算出来。
AC_INIT([vdsm],
[m4_esyscmd([build-aux/pkg-version --version])],
[vdsm-devel@lists.fedorahosted.org])
4.2 解决Autoconf的版本¶
选择最低的Autoconf的版本确保可以成功的编译configure.ac
。
AC_PREREQ (version)¶
要求Autoconf的最低版本,如果不满足则报错并退出。必须在AC_INIT
之前定义。
AC_PREREQ([2.69])
4.4 找到 configure 的输入¶
AC_CONFIG_SRCDIR (unique-file-in-source-dir)¶
unique-file-in-source-dir是包的源码目录下的某些文件。configure检查这些文件确保目录包含源码。
AC_CONFIG_AUX_DIR (dir)¶
辅助构建工具(e.g., install-sh, config.sub, config.guess, Cygnus configure, Automake and Libtool scripts, etc.)所在的目录。dir可以是srcdir的绝对或相对路径,通常命名为build-aux
。
AC_CONFIG_AUX_DIR([build-aux])
AC_REQUIRE_AUX_FILE (file)¶
声明file必须在上述定义的文件夹中必须存在。
AC_REQUIRE_AUX_FILE([tap-driver.sh])
AC_CONFIG_MACRO_DIR (dir)¶
指定dir作为额外的Autoconf宏的定位。
note:如果在Automake中使用aclocal
生成aclocal.m4
文件,必须在顶级的Makefile.am文件中设置ACLOCAL_AMFLAGS = -I dir
。
4.5 输出文件¶
AC_OUTPUT ([file]..., [extra-cmds], [init-cmds])¶
不推荐使用这个废弃的接口,用以下三个宏代替:
AC_CONFIG_FILES(file...)
AC_CONFIG_COMMANDS([default],
extra-cmds, init-cmds)
AC_OUTPUT
AC_OUTPUT¶
生成config.status并启动它。configure.ac应该以调用此宏结束。 config.status执行所有的配置动作:所有的输出文件、头文件、命令、链接、要配置的子目录
AC_PROG_MAKE_SET¶
如果Make命令、$MAKE被设置或者其他make
,预定义了$(MAKE)
,定义输出变量SET_MAKE
将是空值。否则将SET_MAKE定义为设置$(MAKE)的宏定义。
4.6 执行配置动作¶
configure实际上还有一个隐藏的子文件config.status。configure检查系统,config.status基于检查的结果执行相应的操作。
4.7 创建配置文件¶
AC_CONFIG_FILES (file..., [cmds], [init-cmds])¶
让AC_OUTPUT
通过复制输入文件(默认是file.in文件)并代替里面的变量的值来创建每一个file。通常用于生成Makefile,但也可以指定其它文件。
AC_CONFIG_FILES([Makefile src/Makefile man/Makefile X/Imakefile])
AC_CONFIG_FILES([autoconf], [chmod +x autoconf])
冒号分隔指定输入文件:
AC_CONFIG_FILES([Makefile:boiler/top.mk:boiler/bot.mk]
[lib/Makefile:boiler/lib.mk])
4.8 Makefile中的替换¶
被替换到输出文件的变量称作output variables。
4.8.1 预置输出变量¶
- CFLAGS - C编译器的调试和优化选项。
- builddir - 等于
.
。 - abs_builddir - builddir的绝对名称。
- top_builddir - 当前目录相对于顶级目录的相对路径。在顶级目录与
builddir
相等。 - top_build_prefix - 当前目录相对于顶级目录的相对路径,带有
/
如果不为空。帮助make在顶级构建目录区别对待./file
和file
。 - abs_top_builddir - top_builddir的绝对名称。
- srcdir - 对于makefile包含了源码的目录。
- abs_srcdir - srcdir的绝对名称。
- top_srcdir - 对于package包含了源码的顶级目录。在顶级目录的的configure.ac中没有用处,是空值!!!;在子目录的configure.ac和Makefile.am中才能发挥作用。
- abs_top_srcdir - 对于package包含了源码的顶级目录的绝对名称。 更多说明请参考Preset Output Variables。
4.8.2 安装目录变量¶
后缀/
被删除,例如${prefix}/lib。
- bindir - 可执行文件的安装目录。
- datadir - 安装特殊的只读、架构依赖的数据文件目录。
- datarootdir - 只读架构依赖数据文件的根目录。通常是
/usr/local/share
,但是写作$(prefix)/share
(如果使用Autoconf,写作@datarootdir@
,其余变量同理)。 - docdir - 文档文件。
- exec_prefix - 架构依赖文件的安装前缀。默认情况下与prefix相同。
- includedir - 安装C的头文件
- infodir - Info格式的文档
- libdir - 对象代码库文件
- libexecdir - 其它程序运行的可执行文件
- mandir - man格式文档的安装顶级目录
- prefix - 所有文件的安装前缀。
- sbindir - 系统administrators运行的可运行文件的安装目录。 更加详细的说明参考Variables for Installation Directories。
4.9 配置头文件¶
AC_CONFIG_HEADERS (header ..., [cmds], [init-cmds])¶
让AC_OUTPUT
创建一个头文件,该文件列出一系列的#define
声明;赋值DEFS=-DHAVE_CONFIG_H
。通常头文件header的名字是config.h。
一般输入源是header.in
,可以采用冒号分隔符来指定输入来源。
AC_CONFIG_HEADERS([config.h:config.hin])
4.10 运行任意配置命令¶
AC_CONFIG_COMMANDS (tag..., [cmds], [init-cmds])¶
config.status结束的时候执行额外的命令。 下面两个类似的宏是由configure执行的,不能使用config.status来重新运行它们。
AC_CONFIG_COMMANDS_PRE (cmds)¶
创建config.status之前执行。
AC_CONFIG_COMMANDS_POST (cmds)¶
创建config.status之后执行。