2012-04-17 142 views
6

我有以下問題configure.ac:添加路徑AC_CHECK_LIB

我想,因爲我必須使用這些庫中一些瘋狂的文件夾添加庫搜索路徑。我的想法是有一個選項要做到這一點:

AC_ARG_WITH([cplex-lib-path], 
    [AS_HELP_STRING([--with-cplex-libs], [location of the CPLEX library])], 
    [CPLEX_LIBS="-L$withval --lcplex"], 
    []) 

如果有人指定我當然希望看到庫路徑如果庫,可以發現:

AC_CHECK_LIB([cplex], [CPXcreateprob], [], 
[ 
    AC_MSG_ERROR([Could not find CPLEX library]) 
]) 

不過,我想將CPLEX_LIBS添加到AC_CHECK_LIB的庫搜索路徑。這是否有可能?

回答

14

用戶的責任是告訴配置腳本庫的位置。有提供給用戶很多選擇,最常見的是:

configure LDFLAGS=-L/p/a/t/h 

絕對沒有任何理由維護者修​​改構建腳本在所有以適應這一點用戶,併爲許多很好的理由不要試圖做任何事情。如果您(作爲用戶)發現您的庫位於多個位置,則可以在您的環境中或在config.site中設置LDFLAGS。你的工具鏈可能有其他機制(例如,如果你使用gcc,你可以簡單地設置LIBRARY_PATH)。 autoconf提供的基礎架構已經提供了大量的機制來處理這個問題,而軟件包維護者最好不要重新發明輪子並提供非標準接口。

既然我認爲你不應該做你想做的事,我會告訴你如何去做。 AC_CHECK_LIB將使用LDFLAGS價值爲它的搜索,所以你可以這樣做:

LDFLAGS="$LDFLAGS $CPLEX_LIBS"  # this is a bug 

,這是錯誤的,因爲你現在有一個-l標誌LDFLAGS,但-l論點LIBS屬於。另外,如果您打算讓另一個庫,libfoo和$ FOO_LIBS指向另一個位置,則根本無法消除歧義:LDFLAGS將獲得-L/cplex和-L/foo,並且用戶不知道哪一個第一,並不能保證與其他圖書館的聯繫。簡而言之,請勿使用CPLEX_LIBS:教育您的用戶使用LDFLAGS。此外,它是更方便類型:

configure LDFLAGS='-Lpath1 -Lpath2' 

比它鍵入

configure --with-cplex=path1 --with-foo=path2 

,後者混淆的事情,並導致一個沒有受過教育的民衆。我從來沒有理解爲什麼人們喜歡在他們的構建中放入這些--with-lib =/p/a/t/h選項:他們沒有提供任何有用的東西。