您尝试做的问题是AC_CHECK_SIZEOF
实际上并没有定义一个名为SIZEOF_INT
. 在 2.68 中,您想要的变量是 named 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 更稳定。可能也不太稳定。;)YMMV)
要定义您的宏(请注意我对命名约定的评论),您可以这样做:
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 *
,但为简单起见,我将保留它而不是用更通用的版本替换它:
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])
])
注意:我认为$()
在可移植的配置脚本中应该避免使用这种符号,并且应该用反引号代替。但是,我发现反引号很可怕。