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
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 in keinster
Weise, 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-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 .endif
s 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.
In 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.
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.
Falls 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>.