Function Autoconf生成带有中断函数的配置(ac\U fn\U set\U状态、ac\U fn\U退出)
我正在尝试为我的项目设置自动功能。除了在./configure中找不到ac_set_uuu函数外,我的所有功能都“正常”工作。如果我直接运行configure.status,它们可以正常工作 具体来说,我在as_fn_set_status和as_fn_exit方面遇到了问题 如果我手动编辑配置文件并将这两个函数移到配置脚本的顶部,则一切正常 要达到这一点,我:Function Autoconf生成带有中断函数的配置(ac\U fn\U set\U状态、ac\U fn\U退出),function,autoconf,configure,Function,Autoconf,Configure,我正在尝试为我的项目设置自动功能。除了在./configure中找不到ac_set_uuu函数外,我的所有功能都“正常”工作。如果我直接运行configure.status,它们可以正常工作 具体来说,我在as_fn_set_status和as_fn_exit方面遇到了问题 如果我手动编辑配置文件并将这两个函数移到配置脚本的顶部,则一切正常 要达到这一点,我: 写入configure.ac 运行自动经济-i 运行/配置 结果行类似于: ./configure: line 1366: as_fn_
./configure: line 1366: as_fn_set_status: command not found
[AS_REQUIRE_SHELL_FN([as_fn_set_status],
[AS_FUNCTION_DESCRIBE([as_fn_set_status], [STATUS],
[Set $? to STATUS, without forking.])], [ return $[]1])]dnl
有3-4行发生错误
关于什么可能产生这种效果有什么想法吗?这是我的configure.ac:
##########################################
# Autoconf Configuration File for RPDB #
##########################################
# RPDB: An Object-Oriented Wrapper for Oracle's Berkeley Database (BDB/libdb),
# which is available at: http://www.oracle.com/technology/software/products/berkeley-db/index.html
###########################
# Init Autoconf >= 2.61 #
###########################
AC_CANONICAL_SYSTEM
AC_PREREQ(2.61)
AC_INIT([rpdb], [0.1.0], [asher@ridiculouspower.com])
AC_CONFIG_AUX_DIR([.])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_FILES([Makefile])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE
#################################
# Check for Library Functions #
#################################
AC_FUNC_ERROR_AT_LINE
AC_FUNC_MALLOC
AC_CHECK_FUNCS([strdup])
################################
# Check for Working Compiler #
################################
AC_PROG_CC
AC_PROG_RANLIB
#########################
# Check for Libraries #
#########################
AC_SEARCH_LIBS([db_create], [db], [have_libdb=yes])
#######################
# "Root Sourcefile" #
#######################
# "Root Sourcefile" is only used nominally to specify base path
AC_CONFIG_SRCDIR([src/RPDB_Base/RPDB.h])
#######################
# Check for Headers #
#######################
AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h string.h])
# If we found libdb then check for db.h - we need to have both or we throw an error
if test "x${have_libdb}" = xyes; then
AC_CHECK_HEADERS([db.h], [], [have_libdb=no])
fi
if test "x${have_libdb}" = xno; then
echo "------------------------------------------"
echo " Oracle's Berkeley Database (libdb) "
echo " library and header file is required to "
echo " build RPDB. Stopping... "
echo " Check 'config.log' for more information. "
echo "------------------------------------------"
(exit 1); exit 1;
fi
#####################################################
# Check For Type-Related Compiler Characteristics #
#####################################################
AC_C_CONST
AC_HEADER_STDBOOL
AC_TYPE_INT32_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
AC_TYPE_UINT8_T
###############################
# Generate Configure Script #
###############################
AC_OUTPUT
您是否安装了不同的autoconf。我认为该函数源自m4宏:
m4sugar/m4sh.m4
。您可以检查该文件,看看它是否具有该功能
它应该看起来像:
./configure: line 1366: as_fn_set_status: command not found
[AS_REQUIRE_SHELL_FN([as_fn_set_status],
[AS_FUNCTION_DESCRIBE([as_fn_set_status], [STATUS],
[Set $? to STATUS, without forking.])], [ return $[]1])]dnl
您不能调用在AC_INIT之前具有非空扩展的任何宏。如果将AC_CANONICAL_系统的调用移动到AC_INIT之后,您的问题应该会消失。我遇到了一个类似的问题,这让我发疯,最终发现了问题: 我试图编译一个提供自己的m4宏的旧项目。在包含的m4文件(在config子目录中)中,有对AC_DEFFUN的调用,该调用提供了第三个参数。
我不明白为什么会出现这个问题,但去掉第三个参数会有所帮助。我不明白,函数实际上就在那里,并显示在configure的最终输出中。如果我手动编辑configure,它会工作。
m4sh.m4
中的注释提到“我们不能简单地使用“exit N”,因为有些shell….”。这可能与以下行有关:(退出1);出口1代码>?我搬到了CMake,所以我不能很容易地验证这一点,但它是有意义的,所以我将接受它。这与我可以向上移动宏(可能是由AC_INIT创建的)的事实相符,它们可以工作。