24.02.2013 Aufrufe

Einf ¨uhrung in UNIX - CIS

Einf ¨uhrung in UNIX - CIS

Einf ¨uhrung in UNIX - CIS

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

2.7 Writer’s Workbench 173<br />

• Das ausführbare Programm (Ziel, Target) namens pgm hängt ab von den<br />

Modulen im Objektcode a.o und b.o. Es entsteht durch den Compileraufruf<br />

cc a.o b.o -o pgm.<br />

• Das Programmodul a.o hängt ab von dem <strong>in</strong>clude-File <strong>in</strong>cl.h und dem<br />

Modul im Quellcode a.c. Es entsteht durch den Aufruf des Compilers<br />

mit cc -c a.c. Die Option - c unterb<strong>in</strong>det das L<strong>in</strong>ken.<br />

• Das Programmodul b.o hängt ab von demselben <strong>in</strong>clude-File und<br />

dem Modul im Quellcode b.c. Es entsteht durch den Compileraufruf<br />

cc -c b.c.<br />

E<strong>in</strong> makefile ist ähnlich aufgebaut wie e<strong>in</strong> Backrezept: erst werden die<br />

Zutaten aufgelistet, dann folgen die Anweisungen. Zu beachten ist, daß man<br />

mit dem Ziel beg<strong>in</strong>nt und rückwärts bis zu den Quellen geht. Kommentar beg<strong>in</strong>nt<br />

mit e<strong>in</strong>em Doppelkreuz und geht bis zum Zeilenende. Leerzeilen werden<br />

ignoriert.<br />

make(1) verwaltet auch verschiedene Versionen der Programmodule und<br />

paßt auf, daß e<strong>in</strong>e neue Version <strong>in</strong> alle betroffenen Programmteile e<strong>in</strong>gebunden<br />

wird. Umgekehrt wird e<strong>in</strong>e aktuelle Version e<strong>in</strong>es Moduls nicht unnötigerweise<br />

kompiliert. Warum wird im obigen Beispiel das <strong>in</strong>clude-File <strong>in</strong>cl.h<br />

ausdrücklich genannt? Der Compiler weiß doch auf Grund e<strong>in</strong>er entsprechenden<br />

Zeile im Quelltext, daß dieses File e<strong>in</strong>zub<strong>in</strong>den ist? Richtig, aber<br />

make(1) muß das auch wissen, denn das <strong>in</strong>clude-File könnte sich ändern,<br />

und dann müssen alle von ihm abhängigen Programmteile neu übersetzt<br />

werden. make(1) schaut nicht <strong>in</strong> die Quellen h<strong>in</strong>e<strong>in</strong>, sondern nur auf die<br />

Zeitstempel der jüngsten<br />

Änderungen. Unveränderliche <strong>in</strong>clude-Files wie<br />

stdio.h brauchen nicht im makefile aufgeführt zu werden.<br />

Nun e<strong>in</strong> etwas umfangreicheres Beispiel, das aber längst noch nicht alle<br />

Fähigkeiten 37 von make(1) ausreizt:<br />

# Kommentar, wie ueblich<br />

CC = /b<strong>in</strong>/cc<br />

CFLAGS =<br />

FC = /usr/b<strong>in</strong>/f77<br />

LDFLAGS = -lcl<br />

all: csumme fsumme clean<br />

csumme: csumme.c csv.o csr.o<br />

$(CC) -o csumme csumme.c csv.o csr.o<br />

csv.o: csv.c<br />

$(CC) -c csv.c<br />

csr.o: csr.c<br />

$(CC) -c csr.c<br />

37 Alles kann make nicht. Tippen Sie e<strong>in</strong> make love.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!