13.07.2015 Aufrufe

Einführung in C/C++ - Alex-weingarten.de

Einführung in C/C++ - Alex-weingarten.de

Einführung in C/C++ - Alex-weingarten.de

MEHR ANZEIGEN
WENIGER ANZEIGEN
  • Keine Tags gefunden...

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

22 KAPITEL 1. PROGRAMMIEREN IN C/<strong>C++</strong>csumme: csumme.c csv.o csr.o$(CC) -o csumme csumme.c csv.o csr.ocsv.o: csv.c$(CC) -c csv.ccsr.o: csr.c$(CC) -c csr.cfsumme: fsumme.c fsr.o$(CC) -o fsumme fsumme.c fsr.o $(LDFLAGS)fsr.o: fsr.f$(FC) -c fsr.fclean:rm *.oQuelle 1.8 : Makefile mit Makros und Dummy-ZielenZunächst wer<strong>de</strong>n e<strong>in</strong>ige Makros <strong>de</strong>f<strong>in</strong>iert, z. B. <strong>de</strong>r Compileraufruf CC. Überall, wo im Makefiledas Makro mittels $(CC) aufgerufen wird, wird es vor <strong>de</strong>r Ausführung wörtlich ersetzt.Auf diese Weise kann man e<strong>in</strong>fach e<strong>in</strong>en an<strong>de</strong>ren Compiler wählen, ohne im ganzen Makefileper Editor ersetzen zu müssen. Dann haben wir e<strong>in</strong> Dummy-Ziel all, das aus e<strong>in</strong>er Aufzählungweiterer Ziele besteht. Mittels make all wird dieses Dummy-Ziel erzeugt, d. h. dieaufgezählten Ziele. Unter diesen bef<strong>in</strong><strong>de</strong>t sich auch e<strong>in</strong>es namens clean, das ohne Zutatendaherkommt und offenbar nur bestimmte Tätigkeiten wie das Löschen temporärer Dateienbezweckt. E<strong>in</strong> Dummy-Ziel ist immer out-of-date, die zugehörigen Kommandos wer<strong>de</strong>nimmer ausgeführt.make(1) darf rekursiv aufgerufen wer<strong>de</strong>n, e<strong>in</strong> Makefile darf make-Aufrufe enthalten, diesich auf an<strong>de</strong>re Makefiles beziehen. Das kann so aussehen:............cd subdirectory ; make all ; make cleanGelangt make an diese Zeile, spr<strong>in</strong>gt es <strong>in</strong> das Unterverzeichnis, sucht dort e<strong>in</strong> Makefile un<strong>de</strong>rzeugt die Ziele all und clean. Anschließend macht es im Makefile <strong>de</strong>s aktuellen Verzeichnissesweiter. E<strong>in</strong>e Anwendung ist e<strong>in</strong> aus mehreren Kapiteln bestehen<strong>de</strong>s Skriptum, daskomplett als Report formatiert wer<strong>de</strong>n soll, dazu noch die Kapitel <strong>in</strong> jeweils e<strong>in</strong>em eigenenUnterverzeichnis als Artikel samt Folien. Natürlich s<strong>in</strong>d die Makefiles <strong>in</strong> <strong>de</strong>n Unterverzeichnissenweiche L<strong>in</strong>ks auf e<strong>in</strong> e<strong>in</strong>ziges Makefile. Ohne make(1) und e<strong>in</strong>e entsprechen<strong>de</strong> Verzeichnisstrukturwür<strong>de</strong> man sich dumm und dämlich tippen.Im GNU-Projekt wird Software im Quellco<strong>de</strong> für verschie<strong>de</strong>ne Systeme veröffentlicht. In<strong>de</strong>r Regel muß man die Quellen auf <strong>de</strong>r eigenen Anlage kompilieren. Infolge<strong>de</strong>ssen gehörenzu <strong>de</strong>n GNU-Programmen fast immer umfangreiche Makefiles o<strong>de</strong>r sogar Hierarchien davon.Übung im Gebrauch von make(1) erleichtert die E<strong>in</strong>richtung von GNU-Software daher erheblich.Oft wird e<strong>in</strong> an das eigene System angepaßtes Makefile erst durch e<strong>in</strong> Kommando./configure erzeugt. Die Reihenfolge bei solchen Programme<strong>in</strong>richtungen lautet dann:./configure(vi Makefile)makemake <strong>in</strong>stallmake cleanwobei make <strong>in</strong>stall Schreibrechte <strong>in</strong> <strong>de</strong>n betroffenen Verzeichnissen erfor<strong>de</strong>rt, also meistSuperuserrechte. Gelegentlich wird make(1) aus e<strong>in</strong>em Shellskript heraus aufgerufen, dase<strong>in</strong>ige D<strong>in</strong>ge vorbereitet. So wird zum Beispiel sendmail(1) durch <strong>de</strong>n Aufruf <strong>de</strong>s mitgeliefertenShellskripts Build erzeugt.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!