我的一个应用程序有一个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
,但我无法将其设为正确的价值......
答案 0 :(得分:3)
您正试图取消引用错误的shell变量。 Autoconf将--with-timeout参数的值显示为$with_timeout
(注意:下划线而不是连字符)。表达式$with-timeout
是可能未初始化的变量$with
和文字字符串-timeout
的连接。
换句话说,使用
AC_DEFINE([CONNECTION_TIMEOUT], [$with_timeout])