Hallo,
im qt-thread kamen wir wegen $QTDIR gerade zu Makefiles. Da ich gerade in Fragelaune bin....
Ein hypothetisches Beispiel: Ich baue ein Programm, dass zwei shared libs nutzt. Sagen wir mal glib und gtk und ermittle irgendwie automatisch (z.B. per "(glib|gtk)-config --libs" die nötigen Flags zum Linken. Fogendes soll dabei ermittelt worden sein:
$ glib-config --libs -L/usr/local/glib/lib -R/usr/local/glib/lib -lglib $ gtk-config --libs -L/usr/local/gtk/lib -R/usr/local/gtk/lib -lgtk
(Ich weiss, da kommen real eigentlich noch ne Menge andere libs raus und eine solche Installation ist recht idiotisch. Das soll mal keine Rolle spielen.)
Wenn ich die beiden Ausgabe einfach zusammenfuege erhalte ich:
LIBS=-L/usr/local/glib/lib -R/usr/local/glib/lib -lglib \ -L/usr/local/gtk/lib -R/usr/local/gtk/lib -lgtk
Ich will, dass das entstehende binary ohne Eintrag der beiden lib-Verzeichnisse in /etc/ld.so.conf und ohne $LD_LIBRARY_PATH seine libs zur Laufzeit in den beiden Verzeichnissen findet. Dazu kann ich dem gcc ueber das Flag -R einen Pfad mitgeben, der als Suchpfad fuer libs mit im binary gespeichert wird. Das war dir Vorrede :-)
Das dumme an der Sache ist, dass der gcc bei mehreren -R-Flags nicht alle Suchpfade ins binary schreibt, sondern nur einen. Die jeweils andere Bibliothek wird also zur Laufzeit nicht gefunden. Richtig waere in obigem Beispiel, das binary mit "-R/usr/local/glib/lib:/usr/local/gtk/lib" zu linken.
Ich suche nun eine elegante Möglichkeit, wie ich dieses Zusammenfassen der Pfade hinter mehreren -R-Flags zu nur einem Flag im Makefile automatisieren kann. Es ist kein Problem, dass Makefile mir einem externen Perlskipt zu verbiegen. Ich suche aber eine Möglichkeit, das irgendwie innerhalb von make evtl. mithilfe von Standardtools wie sed+awk zu machen. Irgendwelche Ideen?
Reinhard
( gibt es einen Preis fuer die laengste Frage auf dieser Liste? :)
On Sat Sep 09, 2000 at 21:28:38 +0200, Reinhard Foerster wrote:
[...] zu machen. Irgendwelche Ideen?
Libtool koennte hier weiterhelfen:
$ libtool -n --mode=link gcc -o foo -R/lib/eins -R/lib/zwei mkdir .libs gcc -o foo -Wl,--rpath -Wl,/lib/eins -Wl,--rpath -Wl,/lib/zwei -Wl,--rpath -Wl,/lib/eins -Wl,--rpath -Wl,/lib/zwei
Adam
lug-dd@mailman.schlittermann.de