2012-04-17 6 views
6

yolunu ekleme ben configure.ac ile aşağıdaki sorun var: Ben kullanmak zorunda kütüphaneler bazı çılgın klasörlerde çünkü bir kütüphane arama yolunu eklemek istiyorumAC_CHECK_LIB

. Benim fikrim bir seçenek bu yapmaktır:

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

Birinin tabii görmek istiyorum kütüphane yolunu belirtirse kütüphane bulunabilir eğer:

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

Ancak, ben istiyorum CPLEX_LIBS dosyasını AC_CHECK_LIB kütüphane arama yoluna ekleyin. Bu bir şekilde mümkün mü?

cevap

14

Yapılandırma komut dosyasının kütüphanelerin nerede olduğunu söylemesi kullanıcının sorumluluğundadır.

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

için birçok iyi nedeni vardır kesinlikle bu noktada bir kullanıcı karşılamak için hiç inşa komut dosyalarını değiştirmek için sürdürücü için hiçbir neden yoktur ve: En yaygın varlık ile kullanıcıya birçok seçenek vardır hiçbir şey yapmaya çalışmıyor. Siz (kullanıcı olarak) kütüphanelerinizin birçok konumda olduğunu fark ederseniz, ortamınıza veya bir config.site dizinine LDFLAGS ayarlayabilirsiniz. Alet zinciriniz muhtemelen başka mekanizmalara sahiptir (örn. Gcc kullanıyorsanız, sadece LIBRARY_PATH'yi ayarlayabilirsiniz). Autoconf'un sağladığı altyapı zaten bu konuyla ilgilenmek için çok sayıda mekanizma sağlıyor ve ambalaj koruyucusu, tekerleği yeniden icat etmemek ve standart olmayan arayüzler sağlamaktan daha iyidir.

Şimdi yapmaya çalıştığınız şeyi yapmaman gerektiğini iddia ettim, nasıl yapacağınızı söyleyeceğim. AC_CHECK_LIB onun arama için LDFLAGS değeri kullanması ve böylece bunları yapabilirsiniz:

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

ve artık LDFLAGS bir -l bayrağı var çünkü bu yanlış, ama -l argümanlar LIBS aitsin. Ayrıca, başka bir kütüphaneye, libfoo'ya ve farklı bir yere işaret eden $ FOO_LIBS'a sahip olacaksanız, farklı bir yol bulmak mümkün değildir: LDFLAGS -L/cplex ve -L/foo alacak ve kullanıcı hangisi olduğunu bilmeyecektir. önce gelir ve diğeri üzerinde bir kütüphaneye karşı bağlantı garanti edemez. Kısacası, CPLEX_LIBS'yi kullanmayın: LDFLAGS'yi kullanmanız için kullanıcılarınızı eğitin. Ayrıca, türüne daha uygun olur:

configure LDFLAGS='-Lpath1 -Lpath2' 

o

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

yazın ve ikincisi şeyler obfuscates ve eğitimsiz halk yol açar daha. İnsanların niçin --with-lib =/p/a/t/h seçeneklerine sahip olduklarını neden hiç anlayamadım.