我的一个应用程序有一个CONNECTION_TIMEOUT
常量(其名称非常明了)。此常数被定义为一个预处理宏(#define
)如下:通过AC_DEFINE给一个宏赋予一个整数值
#ifndef CONNECTION_TIMEOUT
#define CONNECTION_TIMEOUT 3
#endif
我之所以用#ifndef
和#endif
这里是因为我想这个宏是可配置在编译的时候,也就是通过./configure
脚本。
AC_ARG_WITH([timeout], [AS_HELP_STRING([--with-timeout], [...])])
AS_IF([test "x$with-timeout" != "x"],
[AC_DEFINE_UNQUOTED([CONNECTION_TIMEOUT], ["$with-timeout"], ["..."])]
)
由于这一点,用户可以编译一个自定义的超时值的应用程序:为了实现这一点,我在configure.ac
文件添加一个开关
./configure --with-timeout=1
事情是,当我做这个,我的宏设置为"1"
,而不是1
。正因为如此,当我试图操纵它......
int timeout = CONNECTION_TIMEOUT;
...指向(char*)
整数(int)
,没有一个演员。很值得期待。
我怎样才能得到autoconf
将我的宏设置为一个整数值,没有引号?我一直在使用单引号试过了,AC_DEFINE
但我不能得到正确的价值...
您是否尝试过只用'[$有超时]的''而不是[ “$与超时”]'? – ccKep 2014-10-10 12:53:14
是的。我的宏设置为''-timeout''('$ with'为空,'-timeout'为字符串)。 – 2014-10-10 12:57:18
一般来说,'AC_ARG_WITH'用于外部包,你可能想在第一时间看看'AC_ARG_VAR'。例如,使用'AC_ARG_WITH'允许使用'--without-timeout'。然后,只需使用不带破折号的变量名称,就可以删除上面的引号。 – ccKep 2014-10-10 13:05:50