2014-10-10 89 views
0

我的一個應用程序有一個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但我不能得到正確的價值...

+0

您是否嘗試過只用'[$有超時]的''而不是[ 「$與超時」]'? – ccKep 2014-10-10 12:53:14

+0

是的。我的宏設置爲''-timeout''('$ with'爲空,'-timeout'爲字符串)。 – 2014-10-10 12:57:18

+1

一般來說,'AC_ARG_WITH'用於外部包,你可能想在第一時間看看'AC_ARG_VAR'。例如,使用'AC_ARG_WITH'允許使用'--without-timeout'。然後,只需使用不帶破折號的變量名稱,就可以刪除上面的引號。 – ccKep 2014-10-10 13:05:50

回答

3

您正在嘗試取消引用錯誤的shell變量。 Autoconf將--with-timeout參數的值顯示爲$with_timeout(注意:下劃線而不是連字符)。表達$with-timeout是可能的,未初始化的變量$with和文字串-timeout的concatentation。

換句話說,使用

AC_DEFINE([CONNECTION_TIMEOUT], [$with_timeout]) 
+0

而且...編譯成功了,謝謝!不過,我使用了'AF_DEFINE_UNQUOTED',否則,我得到解除引用。 – 2014-10-10 16:21:41

相關問題