2012-04-17 14 views
6

Ich habe folgendes Problem mit configure.ac:Hinzufügen eines Pfad zu AC_CHECK_LIB

Ich mag würde einen Bibliothekssuchpfad hinzugefügt werden, da die Bibliotheken, die ich in einigen verrückt Ordner zu verwenden. Meine Idee ist, dies mit einer Option zu tun:

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

Wenn jemand gibt den Bibliothekspfad würde ich kann natürlich gerne sehen, wenn die Bibliothek zu finden:

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

Allerdings würde ich gerne Fügen Sie die CPLEX_LIBS dem Bibliothekssuchpfad von AC_CHECK_LIB hinzu. Ist das irgendwie möglich?

Antwort

14

Es liegt in der Verantwortung des Benutzers, dem configure-Skript mitzuteilen, wo sich die Bibliotheken befinden. Es gibt viele Optionen für den Benutzer verfügbar, mit dem der gängigste:

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

Es gibt absolut keinen Grund für den Betreuer des Build-Skripte überhaupt zu ändern, um einen Benutzer zu diesem Punkt zu empfangen, und viele gute Gründe für nicht versuchen, etwas zu tun. Wenn Sie (als Benutzer) feststellen, dass sich Ihre Bibliotheken an vielen Orten befinden, können Sie LDFLAGS in Ihrer Umgebung oder in einer config.site einstellen. Ihre Toolchain hat wahrscheinlich andere Mechanismen (zB wenn Sie gcc verwenden, können Sie einfach LIBRARY_PATH setzen). Die von autoconf bereitgestellte Infrastruktur bietet bereits zahlreiche Mechanismen, um mit diesem Problem umzugehen, und der Paketbetreuer ist besser darin, das Rad nicht neu zu erfinden und nicht standardisierte Schnittstellen bereitzustellen.

Jetzt, wo ich argumentiert habe, dass Sie nicht tun sollten, was Sie versuchen zu tun, werde ich Ihnen sagen, wie es geht. AC_CHECK_LIB den Wert in LDFLAGS für die Suche verwenden, so können Sie dies tun:

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

und das ist falsch, weil Sie jetzt eine -l Flagge in LDFLAGS, aber -l Argumente gehören in LIBS. Auch wenn Sie eine andere Bibliothek, libfoo und $ FOO_LIBS haben, die auf einen anderen Ort zeigen, gibt es einfach keine Möglichkeit zu disambiguieren: LDFLAGS erhält -L/cplex und -L/foo und der Benutzer wird nicht wissen, welche kommt zuerst und wird nicht in der Lage sein, die Verknüpfung mit einer Bibliothek gegenüber der anderen zu garantieren. Kurz gesagt, verwenden Sie nicht CPLEX_LIBS: Erziehen Sie Ihren Benutzer zur Verwendung von LDFLAGS. Auch ist es bequemer, um Typ:

configure LDFLAGS='-Lpath1 -Lpath2' 

als

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

und letztere verschleiert Dinge zu geben und führt zu einer ungebildeten Bevölkerung. Ich habe nie verstanden, warum Leute diese Optionen --with-lib =/p/a/t/h in ihre Builds einbauen: Sie bieten nichts Nützliches.

Verwandte Themen