![]() | Das Makefile.am Howto |
| Zurück | Weiter |
Inhaltsverzeichnis
bin_PROGRAMS = kdialog kdialog_SOURCES = kdialog.cpp widgets.cpp ... kdialog_LDADD = $(LIB_KIO) kdialog_LDFLAGS = $(all_libraties) $(KDE_RPATH) AM_CPPFLAGS = $(all_includes) METASOURCES = AUTO
bin bedeutet, Du möchtest etwas erzeugen, was in das bin Verzeichnis von KDE installiert wird. *_PROGRAMS bedeutet, Du möchtest ein Programm erzeugen, welches kompiliert werden muss. Verwende _SCRIPTS für Skripte, u.s.w. Dann kannst Du den Namen des Programms sehen. Dieser Name wird in den Zeilen unterhalb verwendet, um das Programm zu definieren, für welches dort die Optionen zum Erzeugen desselben definiert werden.
Hier definierst Du mit welchen Bibliotheken das Programm verlinkt wird. Du kannst nur -lfoo, ..Pfad/zur/Bibliothek.la (nur relative Pfade), oder die $(LIB_*) Makros verwenden, welche vom KDE Build System bereitgestellt werden. Wenn eine Bibliothek A von einer Bibliothek B abhängt, musst Du B nicht angeben. Aber wenn Du beide angibst (z.B. weil sich die Abhängigkeiten von A ändern können), stelle sicher, dass du A vor B angibst. Lokale .a Bibliotheken kommen also an erster Stelle, dann $(LIB_*). dann -lfoo, wenn nötig.
Zuletzt definierst Du die Flags, die an den Linker übergeben werden müssen, in *_LDFLAGS. Das können -L Flags sein (üblicherweise vom configure Lauf in eine Variable gesetzt). $(all_libraries) beinhaltet alle -L Flags, die nötig sind, um QT und KDE zu finden, diese Angabe musst Du hier haben. Für Programme solltest Du $(KDE_RPATH) verwenden, es hilft den Programmen, ihre Bibliotheken zu finden ohne dass LD_LIBRARY_PATH gesetzt sein muss.
Zusätzliche Flags für den Compiler. Diese Variable muss $(all_inlcudes) enthalten. An dieser Stelle sind auch weitere Flags für den Übersetzungslauf vorzugeben, wie -DWITHOUTBUGS und -I$(srcdir)/subdir, um eigene Header in Unterverzeichnissen zu finden. WICHTIG: Füge -I Vorgaben immer vor $(all_includes) ein. Damit stellst Du sicher, dass die eigenen Header verwendet werden, nicht etwa ältere bereits früher installierte Versionen.
Beachte, dass $(srcdir) und . (das Build-Verzeichnis) immer automatisch eingebunden sind. Du wirst in vielen bestehenden KDE-Anwendungen Makefile.ams finden, die noch die Variable INCLUDES verwenden. Das war der alte Name für diese Variable, aber man sollte heutzutage nur noch AM_CPPFLAGS verwenden.
Dann gibt es noch die KDE_CXXFLAGS. Dessen Rolle ist es, andere Flags anzuhängen, womit das ein oder andere vom Build Framework gesetzte Flag überschrieben werden kann. Das ist zum Beispiel der Fall, wenn man Exceptions einsetzen möchte, welche grundsätzlich ausgeschaltet sind. Wenn Du Exceptions verwenden möchtest, musst Du
KDE_CXXFLAGS = $(USE_EXCEPTIONS)eintragen.
METASOURCES = AUTOist die magische Zeile, die das KDE Build System dazu bringt, sich um die moc Dateien automatisch zu kümmern. Es ist der empfohlene Weg, wenn alle Deine .cpp/.cc Dateien ihre .moc Datei inkludieren (das ist der beste Weg, denn es führt zu einer schnelleren Übersetzung), oder wenn Du ein einzelnes Binärprogramm oder eine einzelne Bibliothek übersetzt.
Solltest Du mehrere Binärdateien / Bibliotheken übersetzen wollen, solltest Du die längere Form verwenden:
libirgendwas_la_METASOURCES = meinedatei.moc meineanderedatei.moc meinbinaerprogramm_METASOURCES = eineanderedatei.moc
| Zurück | Zum Anfang | Weiter |
| Das Makefile.am Howto | Nach oben | Makefile.am für Shared Libraries |