![]() | Code wiederverwenden: Komfortbibliotheken (*.a) |
| Zurück | Das Makefile.am Howto | Weiter |
Wenn Du die selbe Quelldatei mit den selben Optionen in zwei Shared Libraries oder in zwei Programme übersetzt, welche im selben Verzeichnis liegen, dann ist das schön. Du kannst die Quelldatei in beide _SOURCES Zeilen eintragen. Die Quelldatei wird tatsächlich nur einmal übersetzt, und die Objektdatei wird für beide Ziele verwendet.
Wenn Du jedoch die selbe Quelldatei in einer Bibliothek und in einem Programm verwenden möchtest, oder wenn du die Quelldatei zwischen verschiedenen Verzeichnissen verwenden willst, kannst Du sie nicht in beide _SOURCES Zeilen eintragen. Das kommt daher, weil Bibliotheken und Programme unterschiedliche Übersetzungsoptionen benötigen (-fPIC), und bei verschiedenen Verzeichnissen funktioniert es nicht, weil automake nicht mit Quelldateien aus anderen Verzheichnissen umgehen kann. Stattdessen solltest Du die wiederzuverwendende Source entweder in eine Shared Library (installiert) oder in eine Komfortbibliothek stecken. Letztere ist eine statische Bibliothek (*.a unter Unix), welhce nicht so installiert wird wie sie ist. Die Ziele (Shared Libraries oder Programme), zu welchen dieKomfortbibliothek "gelinkt" wird, wird die Objekte daraus vielmehr eingliedern.
Um eine Komfortbibliothek zu definieren:
noinst_LTLIBRARIES = libcommon.la libcommon_la_SOURCES = dirk.cpp coolo.cpp ... # streng genommen sind LIBADD or LDFLAGS nicht nötig, aber es kann helfen, # wenn dieser Code z.B. $(LIBJPEG) benötigt, alle Benutzer dieser Komfortbibliothek # dieses aber nicht zu spezifizieren brauchen. # Dann kannst Du die Komfortbibliothek verwenden: meinelib_la_LIBADD = libcommon.la meinprogramm_LDADD = libcommon.la
Dieses ist auch der Weg um Queldateien in Unterverzeichnissen zu übersetzen. Automake erlaubt KEIN
foo_SOURCES = unterverzeichnis/bar.ccDu musst eine Komfortbibliothek im Unterverzeichnis definieren und im übergeordneten Verzeichnis anwenden.
| Zurück | Zum Anfang | Weiter |
| Makefile.am für ein Plugin / Modul | Nach oben | Makefile.am für automatisierte Tests |