如果你通过检验shell变量DEFS来检验以前测试的结果,你需要把这些检验替换为对那些测试的缓存变量的检查。 在configure运行的时候,DEFS不再存在;它仅仅在生成输出文件的时候才被创建。这种与第1版 的不同是因为正确地对变量实行引用(quoting)实在太麻烦而且在每次调用AC_DEFINE都要实行引用是低效的。 参见缓存变量名。

例如,下面是为Autoconf第1版编写的`configure.in’的片断:

AC_HAVE_FUNCS(syslog)
case “$DEFS” in
-DHAVE_SYSLOG) ;;
) # syslog is not in the default libraries. See if it’s in some other.
saved_LIBS=”$LIBS”
for lib in bsd socket inet; do
AC_CHECKING(for syslog in -l$lib)
LIBS=”$saved_LIBS -l$lib”
AC_HAVE_FUNCS(syslog)
case “$DEFS” in
*-DHAVE_SYSLOG
) break ;;
*) ;;
esac
LIBS=”$saved_LIBS”
done ;;
esac
这里是为版本2编写的方式:

AC_CHECK_FUNCS(syslog)
if test $ac_cv_func_syslog = no; then

syslog is not in the default libraries. See if it’s in some other.

for lib in bsd socket inet; do
AC_CHECK_LIB($lib, syslog, [AC_DEFINE(HAVE_SYSLOG)
LIBS=”$LIBS $lib”; break])
done
fi
如果你通过在引号的后边添加反斜线以处理AC_DEFINE_UNQUOTED中的bug,你需要删除它们。 它现在以可以预期的方式工作,并且不需要特别地处理引号(处理反斜线)。 参见设定输出变量。

所有由Autoconf宏设置的布尔shell变量现在用yes'来表示真值。虽然为了向后兼容,有些宏使用空字符串 表示假,大部分宏使用no’来表示假。如果你依赖于shell变量用诸如1或者`t’来表示真, 你就需要改变你的测试。