2013-04-25 66 views
2

我正在創建一個android.m4文件,以便輕鬆查找android SDK/NDK中程序的路徑。爲什麼autoconf緩存我的宏?

的android.m4文件包含一個名爲_android_path_found_notfound的輔助函數:

# _android_path_found_notfound(variable, program, path, found, notfound) 
# 
# search for a program in path. If found, 'variable' is set to the absolute path, 
# then executes 'found', otherwise, 'variable' is set to '' and 'notfound' is run 
m4_define([_android_path_found_notfound], 
    [AC_PATH_PROG([_android_temp_],[$2],[_android_notfound],[$3]) 
    AS_IF([test x"$_android_temp_" = x"_android_notfound"], 
     [$1="" 
     AC_SUBST([$1],[]) 
     $5], 
     [$1="$_android_temp_" 
     AC_SUBST([$1],[$_android_temp_]) 
     $4])]) 

和許多功能,這使用輔助函數:

AC_DEFUN([AC_PROG_ANDROID], 
    [_android_path_found_notfound([ANDROID],[android],[$ANDROID_HOME:$PATH],[$1],[$2])] 
) 

AC_DEFUN([AC_PROG_DX], 
    [_android_path_found_notfound([DX],[dx],[$ANDROID_HOME:$PATH],[$1],[$2])] 
) 

... 

然而,當我運行調用AC_PROG_ANDROID配置腳本那麼AC_PROG_DX,我得到這個:

checking for android... /opt/android-sdk-update-manager/tools/android 
checking for dx... (cached) /opt/android-sdk-update-manager/tools/android 

第二行指向與第一行相同的程序,並讀取(緩存)。爲什麼結果被緩存?

+0

作爲未來讀者的注意事項,以'AC_'開頭的命令是保留的,所以這是一個不錯的選擇。 – qdii 2013-04-25 17:14:37

回答

4

AC_PATH_PROG將其結果保存在一個autoconf特定變量中,該變量鏈接到AC_PATH_PROG中給出的變量。因此,如果您說AC_PATH_PROG([something],...,那麼它會記住「something」的答案。由於您的AC_PROG_ANDROID和AC_PROG_DX都設置了值_android_temp_,所以緩存並稍後使用它的結果。解決這個問題的最簡單方法可能是使用不同的變量來處理AC_PROG_ANDROID和AC_PROG_DX

相關問題