Makefile.am für Shared Libraries

Dies ist ein Beispiel Makefile.am für eine Shared Library.

AM_CPPFLAGS = $(all_includes)

lib_LTLIBRARIES = libkonq.la
libkonq_la_LIBADD = $(LIB_KPARTS)
libkonq_la_LDFLAGS = $(all_libraries) -version-info 6:0:2 -no-undefined
libkonq_la_SOURCES = popupmenu.cc knewmenu.cpp ...

METASOURCES = AUTO

Das lib_prefix bedeutet, dass die Bibliothek in lib/ installiert wird. Dann kommt der Name der Bibliothek, immer mit der Endung .la. Beachte, wie dieses immer zu _la in den Zeilen wird, die dieses referenzieren.

*_LTLIBRARIES

bedeutet "LibTool libraries", d.h. es fordert libtool auf, sie zu behandeln. Du solltest das immer für Bibliotheken verwenden.

*_LIBADD

Hier definierst Du die Liste der Bibliotheken von denen Deine Bibliothek abhängt. Beachte, dass es für Bibliotheken *_LIBADD heißt, anders als bei Programmen, die *_LDADD verwenden. Das ist nicht das selbe (eine Bibliothek erinnert sich nur daran, von welchen Bibliotheken sie abhängt, sie wird nicht verlinkt wie ein ausführbares Programm). Für die Reihenfolge der Abhängigkeiten sieh weiter oben unter *_LDADD bei ausführbaren Programmen.

*_LDFLAGS

Beinhaltet die Flags, die an den Linker übergeben werden müssen. $(all_libraries) beinhaltet wie üblich die -L Flags, die nötig sind, um QT und KDE zu finden. Bei Bibliotheken kann hier außerdem die Versionsnummer der Bibliothek angegeben werden (für genauere Informationen siehe info libtool unter Versionierung / Libtool Versionierung). Es wird besonders empfohlen, -no-undefined zu setzen: Dies erlaubt, zur Linkzeit zu prüfen, das die Bibliothek keine undefinierten Symbole hat. Wenn irgendwelche undefinierten Symbole auftauchen, bedeutet das entweder, Du hast vergessen, eine Methode zu implementieren, oder eine benötigte Bibliothek fehlt in der LIBADD Zeile. Der Rest ist vergleichbar zum gleichen Abschnitt über ausführbare Programme