你试图做的事情的麻烦是AC_CHECK_SIZEOF
实际上并没有定义一个名为SIZEOF_INT
的变量。在2.68中,所需的变量名称为ac_cv_sizeof_int
,但不应使用该名称,因为名称在更高版本中可能会更改。值也被写进confdefs.h,所以另一种方式来抓住它是:
AC_PROG_AWK
AC_CHECK_SIZEOF([int])
SIZEOF_INT=$($AWK '/SIZEOF_INT/{print $3}' confdefs.h)
AC_SUBST([SIZEOF_INT])
(读confdefs.h也是无证行为,并在主题的autoconf未来版本中改变,但可能比更稳定。看着$ ac_cv_sizeof_int可能,不太稳定,太;)情况因人而异)
要定义的宏(请注意我的关于命名约定注释),你可以这样做:
AC_DEFUN([wrp_CHECK_SIZEOF_AND_SUBST], [
AC_REQUIRE([AC_PROG_AWK])
AC_CHECK_SIZEOF([$1])
m4_toupper(SIZEOF_$1)=$($AWK '
/SIZEOF_[]m4_toupper($1)/{print $[]3}' confdefs.h)
AC_SUBST(m4_toupper(SIZEOF_$1))
])
版本以上不不处理int *
,但为了简单起见,我w虐待它保留下来,而不是更一般的版本来替换它:
AC_DEFUN([wrp_CHECK_SIZEOF_AND_SUBST], [
AC_REQUIRE([AC_PROG_AWK])
AC_CHECK_SIZEOF([$1])
m4_pushdef([name],SIZEOF_[]m4_toupper(m4_translit($1,[ *],[_p])))
name=$($AWK '/name/{print $[]3}' confdefs.h)
AC_SUBST(name)
m4_popdef([name])
])
注:我相信$()
符号应在便携的配置脚本来避免,并应与反引号替换。但是,我发现反衬可怕。
请阅读http://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/Macro-Names.html的第3段。虽然我相信“AX_”不会与任何保留的名称空间发生冲突,但建议避免使用该名称。 –
@WilliamPursell我根据ac-archive.sourceforge.net/doc/contribute.html的建议得到了AX_前缀(请参见最后一段) – Naddiseo