通过AC_DEFINE为宏指定一个整数值

时间:2014-10-10 12:40:14

标签: c macros autotools autoconf

我的一个应用程序有一个CONNECTION_TIMEOUT常量(其名称非常明显)。此常量被定义为预处理器宏(#define),如下所示:

#ifndef CONNECTION_TIMEOUT
#define CONNECTION_TIMEOUT 3
#endif

我在这里使用#ifndef#endif的原因是因为我希望此宏在编译时可配置,即通过./configure脚本。为了实现这一点,我在configure.ac文件中添加了一个开关:

AC_ARG_WITH([timeout], [AS_HELP_STRING([--with-timeout], [...])])
AS_IF([test "x$with-timeout" != "x"],
    [AC_DEFINE_UNQUOTED([CONNECTION_TIMEOUT], ["$with-timeout"], ["..."])]
)

由于这个原因,用户可以使用自定义超时值编译应用程序:

./configure --with-timeout=1

事情是,当我这样做时,我的宏设置为"1",而不是1。因此,当我试图操纵它时......

int timeout = CONNECTION_TIMEOUT;

...指针(char*)到整数(int),没有强制转换。很可取。

如何让autoconf将宏设置为整数值,不带引号?我尝试过使用单引号和AC_DEFINE,但我无法将其设为正确的价值......

1 个答案:

答案 0 :(得分:3)

您正试图取消引用错误的shell变量。 Autoconf将--with-timeout参数的值显示为$with_timeout(注意:下划线而不是连字符)。表达式$with-timeout是可能未初始化的变量$with和文字字符串-timeout的连接。

换句话说,使用

AC_DEFINE([CONNECTION_TIMEOUT], [$with_timeout])