Diese Dateien lassen sich am besten verstehen, indem man sich deren Inhalt näher ansieht. Konkret handelt es sich dabei um folgende Dateien:
doc.project.mk ist die
Haupt-Include-Datei, die bei Bedarf alle folgenden
Include-Dateien enthält.
doc.subdir.mk sorgt dafür, dass
alle benötigten Verzeichnisse (und Unterverzeichnisse)
beim Bau der Dokumentation durchlaufen werden.
doc.install.mk definiert Variablen,
die die Installation der Dokumentation beeinflussen.
doc.docbook.mk wird verwendet, wenn
die Variable DOCFORMAT den Wert
docbook hat und die Variable
DOC gesetzt ist.
Diese Datei hat folgenden Aufbau:
DOCFORMAT?= docbook
MAINTAINER?= doc@FreeBSD.org
PREFIX?= /usr/local
PRI_LANG?= en_US.ISO8859-1
.if defined(DOC)
.if ${DOCFORMAT} == "docbook"
.include "doc.docbook.mk"
.endif
.endif
.include "doc.subdir.mk"
.include "doc.install.mk"DOCFORMAT und MAINTAINER
enthalten Standardwerte, falls ihnen über das
Dokument-Makefile keine anderen Werte zugewiesen werden.
Bei PREFIX handelt es sich um das
Präfix, unter dem die zum Bau der Dokumentation
erforderlichen SGML-Werkzeuge
installiert sind. In der Regel handelt es sich dabei um
/usr/local.
PRI_LANG sollte auf die Sprache und
Kodierung eingestellt werden, die unter den Leser der
Dokumentation am häufigsten verwendet wird. Diese
Variable hat den Standardwert "US English".
PRI_LANG beeinflusst nicht,
welche Dokumente gebaut werden können oder
sollen. Diese Variable wird lediglich dazu verwendet,
häufig verwendete Dokumente in das Wurzelverzeichnis
der installierten Dokumentation zu verlinken.
Die Zeile .if defined(DOC) ist ein
Beispiel für eine make(1)-Bedingung, die (analog zum
Einsatz in anderen Programmen) festlegt, was geschehen soll,
wenn eine Bedingung "wahr" oder "falsch" ist.
defined ist eine Funktion, die
zurückgibt, ob die angegebene Variable existiert oder
nicht.
.if ${DOCFORMAT} == "docbook" testet,
ob die Variable DOCFORMAT den Wert
"docbook" hat. Ist dies der Fall, wird
doc.docbook.mk mit in den Bau
aufgenommen.
Die zwei .endifs schließen die
zwei weiter oben definierten Bedingungen.
Den Inhalt dieser Datei hier zu beschreiben, würde zu weit führen. Sie sollten aber nach dem Lesen der vorangegangenen Abschnitte und der folgenden Ausführungen in der Lage sein, Inhalt und Aufgabe dieser Datei zu verstehen.
SUBDIR legt die Unterverzeichnisse
fest, deren Inhalt beim Bau der Dokumentation inkludiert
werden muss.
Mit ROOT_SYMLINKS wird der Name der
Verzeichnisse angegeben, die von ihrer tatsächlichen
Position aus in das Wurzelverzeichnis, unter dem die
Dokumentation installiert wird, verlinkt werden sollen.
Vorausgesetzt, bei der verwendeten Sprache handelt es sich
um die primäre Sprache (die über
PRI_LANG festgelegt wird).
COMPAT_SYMLINK wird im Abschnitt
Unterverzeichnis-Makefiles
beschrieben.
Abhängigkeiten
(Dependencies) werden
folgendermaßen definiert:
.
Um target
abhaengigkeit1 abhaengigkeit2 ...target zu bauen, müssen Sie zuvor
die angegebenen Abhängigkeiten bauen.
Daran anschließend können Anweisungen zum Bau des angegebenen Targets folgen, falls der Konvertierungsprozess zwischen dem Target und seinen Abhängigkeiten nicht bereits früher definiert wurde oder falls die Konvertierung nicht der Standardkonvertierungsmethode entspricht.
Die spezielle Abhängigkeit .USE
definiert das Äquivalent eines Makros.
_SUBDIRUSE: .USE
.for entry in ${SUBDIR}
@${ECHO} "===> ${DIRPRFX}${entry}"
@(cd ${.CURDIR}/${entry} && \
${MAKE} ${.TARGET:S/realpackage/package/:S/realinstall/install/} DIRPRFX=${DIRPRFX}${entry}/ )
.endforIn diesem Beispiel kann _SUBDIRUSE
nun als Makro, welches die angegebenen Befehle ausführt,
verwendet werden, indem es im Makefile als Abhängigkeit
angegeben wird.
Was unterscheidet dieses Makro nun von beliebigen anderen
Targets? Der Hauptunterschied ist, dass es
nach den Anweisungen der Bauprozedur,
in der es als Abhängigkeit angegeben ist, ausgeführt
wird. Außerdem ändert es die Variable
.TARGET (die den Namen des aktuell gebauten
Targets enthält) nicht.
clean: _SUBDIRUSE
rm -f ${CLEANFILES}In diesem Beispiel führt clean
das Makro _SUBDIRUSE aus, nachdem es
den Befehl rm -f ${CLEANFILES} erfolgreich
ausgeführt hat. Dadurch löscht
clean zwar beim Wechsel in ein neues
Unterverzeichnis beim Bau erstellte
Dateien, aber nicht beim Wechsel aus einem Unterverzeichnis
in ein übergeordnetes Verzeichnis.
install und
package arbeiten nacheinander
alle Unterverzeichnisse ab und rufen dabei jeweils ihre
realen Versionen (realinstall
beziehungsweise realpackage)
auf.
clean entfernt alle
Dateien, die beim Bau der Dokumentation erzeugt wurden
(dies sowohl im aktuellen Verzeichnis als auch in allen
Unterverzeichnissen). cleandir
hat die gleiche Aufgabe, würde aber zusätzlich
die Objekt-Verzeichnisse löschen (falls diese
existieren).
exists gibt "wahr" zurück, wenn
die angegebene Datei bereits existiert.
empty gibt "wahr" zurück, wenn
die angegebene Variable leer ist.
target gibt "wahr" zurück, wenn
das angegebene Target noch nicht existiert.
.for erlaubt es, bestimmte
Anweisungen für jedes Element einer Variable zu
wiederholen, indem dieser Variable in jedem Durchlauf
der Schleife das jeweilige Element der untersuchten Liste
zugewiesen wird.
_SUBDIRUSE: .USE
.for entry in ${SUBDIR}
@${ECHO} "===> ${DIRPRFX}${entry}"
@(cd ${.CURDIR}/${entry} && \
${MAKE} ${.TARGET:S/realpackage/package/:S/realinstall/install/} DIRPRFX=${DIRPRFX}${entry}/ )
.endforFalls das Verzeichnis SUBDIR leer ist,
würde in unserem Beispiel keine Aktion erfolgen.
Enthält das Verzeichnis hingegen ein oder mehrere
Elemente, werden die Anweisungen zwischen
.for und .endfor
für jedes Element ausgeführt, wobei
entry durch das jeweilige Element ersetzt
werden würde.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.