我的一個應用程序有一個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