
本文共 2912 字,大约阅读时间需要 9 分钟。
configure.ac 文件参考指南
configure.ac 是一个.gnu Autoconf 工具,用于创建配置脚本(configure),以便在不同平台上自适应地编译和安装软件。它通过使用宏定义和条件检查,帮助开发者统一管理项目的构建过程。以下是对 configure.ac 文件中常用宏的详细解释和示例。
1. 常用宏定义
1.1 AC_PREREQ(版本号)
AC_PREREQ(2.61)
AC_PREREQ 用于检查系统上安装的 Autoconf 工具的最低版本。如果版本不符合要求,configure 脚本会报错并退出。
1.2 AC_INIT(软件包名, 版本号, 联系地址)
AC_INIT([amhello], [1.0], [bug-automake@gnu.org])
AC_INIT 用于初始化软件包的基本信息。参数依次为:
- 软件包名(通常使用大写字母)
- 软件包版本号
- 联系地址(用于报告 bug)
这些信息会被写入生成的 config.h
文件中,便于程序直接引用。
1.3 AM_INIT_AUTOMAKE(选项)
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AM_INIT_AUTOMAKE 检查 Automake 工具的可用性,并设置编译选项。常用的选项包括:
-Wall
:打开所有警告-Werror
:将警告转为错误foreign
:放宽一些 GNU 标准要求
1.4 AC_CONFIG_HEADERS(头文件)
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_HEADERS 用于将 Autoconf 生成的宏定义写入指定的头文件(如 config.h
)。常用于定义软件包的元数据,如版本号、包名和联系信息。
1.5 AC_CONFIG_FILES(文件路径)
AC_CONFIG_FILES([ Makefile src/Makefile ])
AC_CONFIG_FILES 用于将 Autoconf 生成的文件模板(如 Makefile
)写入指定的路径。Automake 会根据 .am
文件生成实际的 Makefile
。
1.6 AC_PROG_CC
AC_PROG_CC
AC_PROG_CC 用于检测系统上的 C 编译器。通常与 CC
环境变量结合使用。
1.7 AC_PROG_SED 和 AC_PROG_YACC
AC_PROG_SED
AC_PROG_SED 检测 sed 实现,并设置SED 变量。AC_PROG_YACC 检测 YACC(Yet Another Compiler Compiler)实例,并设置 YACC 变量。
1.8 AC_CHECK_PROGS(变量名, 可能的程序路径, [默认值])
AC_CHECK_PROGS([TAR], [tar gtar], [:])
AC_CHECK_PROGS 用于检查系统上是否存在指定的程序。如果找到程序,变量将被设置为程序路径;否则,变量将被设置为默认值。
1.9 AC_MSG_ERROR(错误信息, 退出状态)
AC_MSG_ERROR([This package needs tar.])
AC_MSG_ERROR 用于打印错误信息并退出脚本,指定的退出状态会影响 shell 脚本的返回值。
1.10 ACMSG_WARN(错误信息)
AC_MSG_WARN([...])
ACMSG_WARN 用于打印不严重的错误或警告信息,不会退出脚本。
1.11 AC_DEFINE(变量名, 值, 描述)
AC_DEFINE(VARIABLE, VALUE, DESCRIPTION)
AC_DEFINE 用于在 config.h
文件中定义宏。例如:
/* DESCRIPTION */#define VARIABLE VALUE
1.12 AC_SUBST(变量名, [值])
AC_SUBST([FOO], [foo])
AC_SUBST 用于将变量值替换到 Makefile 中,通常用于生成构建脚本。
1.13 AC_CHECK_LIB(库名, 函数名, [成功处理], [失败处理])
AC_CHECK_LIB([efence], [malloc], [EFENCELIB=-lefence])
AC_CHECK_LIB 用于检查特定库的存在性,并设置库路径。例如:
# 在成功处理中,将 EFENCELIB 定义为 -lefence
1.14 AC_CHECK_HEADERS(头文件列表)
AC_CHECK_HEADERS([unistd.h windows.h])
AC_CHECK_HEADERS 用于检查系统上是否存在指定的头文件,并在 config.h
中定义相应的宏。
1.15 AC_CONFIG_AUX_DIR(目录路径)
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_AUX_DIR 用于指定辅助构建脚本的存放目录,例如 install-sh
和 depcomp
。
2. 高级配置示例
2.1 自动化构建
LT_PREREQ([2.4.0]) # 检查 libtool 的最低版本LT_INIT([disable-static win32-dll dlopen]) # 配置 libtool 选项AC_PROG_LIBTOOL
2.2 交叉编译检查
AC_RUN_IFELSE( [AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]], [[fputs (hw, stdout);]])], [libzmq_tipc_support=yes], [libzmq_tipc_support=no], [libzmq_tipc_support=no])
2.3 可选功能
AC_ARG_WITH([militant], [AS_HELP_STRING([--with-militant], [Enable militant API assertions])], [zmq_militant="yes"], [])
2.4 功能启用
AC_ARG_ENABLE([eventfd], [AS_HELP_STRING([--disable-eventfd], [disable eventfd [default=no]])], [zmq_enable_eventfd=$enableval], [zmq_enable_eventfd=yes])
3. 常见错误处理
在编写 configure.ac 文件时,确保:
- 使用
AC_PREREQ
检查所有依赖项。 - 使用
AC_MSG_ERROR
报告严重错误。 - 使用
AC_MSG_WARN
报告不严重错误。 - 使用
AC_RUN_IFELSE
检查交叉编译环境。
通过以上宏的合理组合和使用,可以显著提高配置脚本的可维护性和适应性。
发表评论
最新留言
关于作者
