【发布时间】:2014-04-18 16:43:59
【问题描述】:
最近几天我用 C 写了一个 dovecot 插件。我的源代码本身似乎很好,但我目前想知道如何编译它或如何拥有更具动态性的 Makefile。
问题是,每当我尝试编译时,都会收到错误Error: unknown type name: »uoff_t«
问题是,这种类型是在一个引用的库中以这种方式定义的:
#if defined (HAVE_UOFF_T)
/* native support */
#elif defined (UOFF_T_INT)
typedef unsigned int uoff_t;
#elif defined (UOFF_T_LONG)
typedef unsigned long uoff_t;
#elif defined (UOFF_T_LONG_LONG)
typedef unsigned long long uoff_t;
#else
# error uoff_t size not set
#endif
在 dovecot 的 Autoconf 中,这些变量是基于另一种类型设置的:
AC_CHECK_TYPE(uoff_t, [
have_uoff_t=yes
AC_DEFINE(HAVE_UOFF_T,, Define if you have a native uoff_t type)
], [
have_uoff_t=no
])
AC_TYPEOF(off_t, long int long-long)
case "$typeof_off_t" in
int)
offt_max=INT_MAX
uofft_fmt="u"
if test "$have_uoff_t" != "yes"; then
AC_DEFINE(UOFF_T_INT,, Define if off_t is int)
fi
offt_bits=`expr 8 \* $ac_cv_sizeof_int`
;;
long)
offt_max=LONG_MAX
uofft_fmt="lu"
if test "$have_uoff_t" != "yes"; then
AC_DEFINE(UOFF_T_LONG,, Define if off_t is long)
fi
offt_bits=`expr 8 \* $ac_cv_sizeof_long`
;;
"long long")
offt_max=LLONG_MAX
uofft_fmt="llu"
if test "$have_uoff_t" != "yes"; then
AC_DEFINE(UOFF_T_LONG_LONG,, Define if off_t is long long)
fi
offt_bits=`expr 8 \* $ac_cv_sizeof_long_long`
;;
*)
AC_MSG_ERROR([Unsupported off_t type])
;;
esac
所以毕竟我的问题是,我是否可以在不使用 Automake 的情况下在我的 Makefile 中以等效的方式拥有这些东西。
我的目标是检查是否已经在某处定义了 uoff_t(对于 HAVE_UOFF_T)或如何定义类型 off_t(对于其他参数)。 有什么想法,还是我遗漏了什么?
提前致谢!
【问题讨论】:
-
我不确定我是否听懂了你的问题。您是否希望您的 Makefile 指定
UOFF_T_INT之类的? -
正确。很抱歉没有说清楚。将立即改善问题;)