编写configure.ac
发布日期:2021-05-07 21:03:44 浏览次数:31 分类:精选文章

本文共 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-shdepcomp

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 检查交叉编译环境。

通过以上宏的合理组合和使用,可以显著提高配置脚本的可维护性和适应性。

上一篇:变量在configure.ac,makefile.am,makefile,config.h中的传递
下一篇:编写Makefile.am

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月16日 03时36分27秒