mirror of
https://git.FreeBSD.org/doc.git
synced 2026-06-02 11:25:20 +00:00
bbd89bf624
MFde: Resync de/books/fdp-primer/doc-build/chapter.xml
572 lines
20 KiB
XML
572 lines
20 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!-- Copyright (c) 1999 Neil Blakey-Milner, All rights reserved.
|
|
|
|
Redistribution and use in source (SGML DocBook) and 'compiled' forms
|
|
(SGML HTML, PDF, PostScript, RTF and so forth) with or without
|
|
modification, are permitted provided that the following conditions
|
|
are met:
|
|
|
|
1. Redistributions of source code (SGML DocBook) must retain the above
|
|
copyright notice, this list of conditions and the following
|
|
disclaimer as the first lines of this file unmodified.
|
|
|
|
2. Redistributions in compiled form (transformed to other DTDs,
|
|
converted to PDF, PostScript, RTF and other formats) must reproduce
|
|
the above copyright notice, this list of conditions and the
|
|
following disclaimer in the documentation and/or other materials
|
|
provided with the distribution.
|
|
|
|
THIS DOCUMENTATION IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
|
|
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
|
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
|
|
POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
$FreeBSD$
|
|
$FreeBSDde$
|
|
basiert auf: r52149
|
|
-->
|
|
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="doc-build">
|
|
<info><title>Die Erzeugung der Zieldokumente</title>
|
|
<authorgroup>
|
|
<author><personname><firstname>Johann</firstname><surname>Kois</surname></personname><contrib>Übersetzt von </contrib></author>
|
|
</authorgroup>
|
|
</info>
|
|
|
|
<para>Dieses Kapitels erklärt detailliert,
|
|
<emphasis>wie der Bau der Dokumentation organisiert
|
|
ist</emphasis> und wie Sie diesen Prozess mit &man.make.1;
|
|
beeinflussen können.</para>
|
|
|
|
<sect1 xml:id="doc-build-rendering">
|
|
<title>DocBook in verschiedene Ausgabeformate konvertieren</title>
|
|
|
|
<para>Aus einer einzigen DocBook-Quellcodedatei können
|
|
verschiedene Ausgabeformate erstellt werden. Welches Dateiformat
|
|
erstellt wird, wird über die Variable
|
|
<varname>FORMATS</varname> festgelegt. Eine Liste aller
|
|
verfügbaren Formate ist in <varname>KNOWN_FORMATS</varname>
|
|
gespeichert:</para>
|
|
|
|
<screen xml:id="doc-build-rendering-known-formats">&prompt.user; <userinput>cd ~/doc/en_US.ISO8859-1/books/handbook</userinput>
|
|
&prompt.user; <userinput>make -V KNOWN_FORMATS</userinput></screen>
|
|
|
|
<table xml:id="doc-build-rendering-common-formats" frame="none">
|
|
<title>Häufige Ausgabeformate</title>
|
|
|
|
<tgroup cols="3">
|
|
<thead>
|
|
<row>
|
|
<entry><varname>FORMATS</varname></entry>
|
|
<entry>Dateityp</entry>
|
|
<entry>Beschreibung</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row>
|
|
<entry><literal>html</literal></entry>
|
|
<entry><acronym>HTML</acronym>, Einzeldatei</entry>
|
|
<entry>Eine einzelne <filename>book.html</filename> oder
|
|
<filename>article.html</filename>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>html-split</literal></entry>
|
|
<entry><acronym>HTML</acronym>, multiple Dateien</entry>
|
|
<entry>Multiple <acronym>HTML</acronym>-Dateien, eine
|
|
für jedes Kapitel oder für jeden Abschnitt. Dieser
|
|
Typ wird in der Regel für die Nutzung des Dokuments
|
|
auf einer Internetseite verwendet.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>pdf</literal></entry>
|
|
<entry><acronym>PDF</acronym></entry>
|
|
<entry>Portable Document Format</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
<para>Welches Format verwendet wird, hängt vom jeweiligen
|
|
Dokument ab, in der Regel handelt es sich aber um
|
|
<literal>html-split</literal>. Weitere Formate werden über die
|
|
Variable <varname>FORMATS</varname> angegeben. Dabei können
|
|
Sie ein einzelnes Format, aber auch mehrere Formate gleichzeitig
|
|
definieren.</para>
|
|
|
|
<example xml:id="doc-build-formats-example-html">
|
|
<title>Das Dokument als eine einzelne HTML-Seite bauen</title>
|
|
|
|
<screen>&prompt.user; <userinput>cd ~/doc/en_US.ISO8859-1/books/handbook</userinput>
|
|
&prompt.user; <userinput>make FORMATS=html</userinput></screen>
|
|
</example>
|
|
|
|
<example xml:id="doc-build-formats-example-html-split-pdf">
|
|
<title>Das Dokument in den Formaten HTML-Split sowie
|
|
<acronym>PDF</acronym> bauen</title>
|
|
|
|
<screen>&prompt.user; <userinput>cd ~/doc/en_US.ISO8859-1/books/handbook</userinput>
|
|
&prompt.user; <userinput>make FORMATS="html-split pdf"</userinput></screen>
|
|
</example>
|
|
</sect1>
|
|
|
|
<sect1 xml:id="doc-build-toolset">
|
|
<title>Für den Bau der &os;-Dokumentation benötigte
|
|
Werkzeuge</title>
|
|
|
|
<para>Die folgende Werkzeuge werden benötigt, um die
|
|
<acronym>FDP</acronym>-Dokumente zu bauen und zu installieren.</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Das wichtigste Werkzeug ist &man.make.1;, genauer
|
|
<application>Berkeley Make</application>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Der Bau von Paketen erfolgt unter FreeBSD mit
|
|
&man.pkg-create.8;.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>&man.gzip.1; dient zur Erstellung
|
|
komprimierter Versionen der Dokumentation. &man.bzip2.1; wird
|
|
ebenfalls unterstützt. Wollen Sie Pakete der Dokumentation
|
|
erstellen, benötigen Sie auch &man.tar.1;.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Mit &man.install.1; installieren Sie die Dokumentation auf
|
|
Ihrem System.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect1>
|
|
|
|
<sect1 xml:id="doc-build-makefiles">
|
|
<title>Die <filename>Makefile</filename>s des Dokumentationsbaums
|
|
verstehen</title>
|
|
|
|
<para>Innerhalb des &os; Documentation Projects gibt es drei
|
|
verschiedene Arten von <filename>Makefile</filename>s:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Ein <link linkend="sub-make">
|
|
<filename>Makefile</filename></link> in einem
|
|
Unterverzeichnis gibt Anweisungen an dessen Dateien und
|
|
Unterverzeichnisse weiter.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Ein <link linkend="doc-make">
|
|
Dokument-<filename>Makefile</filename></link> beschreibt das
|
|
Dokument, das aus dem Inhalt des jeweiligen Verzeichnisses
|
|
gebaut werden soll.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><link linkend="make-includes">
|
|
<application>Make</application>-Includes</link> sind der
|
|
"Klebstoff", der für den Bau der Dokumentation
|
|
erforderlich ist. In der Regel heissen diese Dokumente
|
|
<filename>doc.<replaceable>xxx</replaceable>.mk</filename>.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<sect2 xml:id="sub-make">
|
|
<title>Unterverzeichnis-<filename>Makefile</filename>s</title>
|
|
|
|
<para>Derartige <filename>Makefile</filename>s sind in der Regel
|
|
wie folgt aufgebaut:</para>
|
|
|
|
<programlisting>SUBDIR =articles
|
|
SUBDIR+=books
|
|
|
|
COMPAT_SYMLINK = en
|
|
|
|
DOC_PREFIX?= ${.CURDIR}/..
|
|
.include "${DOC_PREFIX}/share/mk/doc.project.mk"</programlisting>
|
|
|
|
<para>Die ersten vier nicht-leeren Zeilen definieren die
|
|
&man.make.1;-Variablen
|
|
<varname>SUBDIR</varname>, <varname>COMPAT_SYMLINK</varname>,
|
|
und <varname>DOC_PREFIX</varname>.</para>
|
|
|
|
<para>Die <varname>SUBDIR</varname>-Anweisung weist
|
|
(ebenso wie die <varname>COMPAT_SYMLINK</varname>-Anweisung)
|
|
einer Variable einen Wert zu und überschreibt dabei
|
|
deren ursprünglichen Wert.</para>
|
|
|
|
<para>Die zweite <varname>SUBDIR</varname>-Anweisung zeigt,
|
|
wie man den aktuellen Wert einer Variable ergänzen
|
|
kann. Nach der Ausführung dieser Anweisung hat die
|
|
Variable <varname>SUBDIR</varname> den Wert
|
|
<literal>articles books</literal>.</para>
|
|
|
|
<para>Die Anweisung <varname>DOC_PREFIX</varname> zeigt, wie
|
|
man einer Variable einen Wert zuweist (vorausgesetzt, die
|
|
Variable ist nicht bereits definiert). Eine derartige
|
|
Anweisung ist beispielsweise sinnvoll, wenn sich
|
|
<varname>DOC_PREFIX</varname> nicht dort befindet, wo es
|
|
vom <filename>Makefile</filename> erwartet wird.
|
|
Durch das Setzen dieser Variable kann der korrekte Wert an
|
|
das Makefile übergeben werden.</para>
|
|
|
|
<para>Was heißt dies nun konkret? Mit den
|
|
<varname>SUBDIR</varname>-Anweisungen legen Sie fest, welche
|
|
Unterverzeichnisse beim Bau der Dokumentation eingeschlossen
|
|
werden müssen.</para>
|
|
|
|
<para><varname>COMPAT_SYMLINK</varname> wird zur Erstellung
|
|
von symbolischen Links zwischen den jeweiligen Dokumentsprachen
|
|
und deren offizieller Kodierung benötigt (so wird
|
|
beispielsweise <filename>doc/en</filename> nach
|
|
<filename>en_US.ISO-8859-1</filename> verlinkt).</para>
|
|
|
|
<para><varname>DOC_PREFIX</varname> gibt den Pfad zum
|
|
Wurzelverzeichnis des Quellcode-Baums des FreeBSD Documentation
|
|
Projects an. Diese Vorgabe kann jederzeit durch einen eigenen
|
|
Wert ersetzt werden. Bei <varname>.CURDIR</varname> handelt es
|
|
sich um eine in &man.make.1; eingebaute
|
|
Variable, die den Pfad des aktuellen Verzeichnisses
|
|
enthält.</para>
|
|
|
|
<para>Die letzte Zeile bindet <filename>doc.project.mk</filename>,
|
|
die zentrale, projektweite &man.make.1;-Datei
|
|
des &os; Documentation Projects, in den Bau ein. Diese Datei
|
|
enthält den "Klebstoff", der die diversen Variablen in
|
|
Anweisungen zum Bau der Dokumentation konvertiert.</para>
|
|
|
|
</sect2>
|
|
<sect2 xml:id="doc-make">
|
|
<title>Dokument-<filename>Makefile</filename>s</title>
|
|
|
|
<para>Diese <filename>Makefile</filename>s definieren diverse
|
|
<application>make</application>-Variablen mit Vorgaben
|
|
zum Bau der im Verzeichnis enthaltenen Dokumentation.</para>
|
|
|
|
<para>Dazu ein Beispiel:</para>
|
|
|
|
<programlisting>MAINTAINER=nik@FreeBSD.org
|
|
|
|
DOC?= book
|
|
|
|
FORMATS?= html-split html
|
|
|
|
INSTALL_COMPRESSED?= gz
|
|
INSTALL_ONLY_COMPRESSED?=
|
|
|
|
# SGML content
|
|
SRCS= book.xml
|
|
|
|
DOC_PREFIX?= ${.CURDIR}/../../..
|
|
|
|
.include "$(DOC_PREFIX)/share/mk/docproj.docbook.mk"</programlisting>
|
|
|
|
<para>Die Variable <varname>MAINTAINER</varname> ist von
|
|
zentraler Bedeutung. Sie legt fest, wer für ein
|
|
bestimmtes Dokument des FreeBSD Documentation Projects
|
|
verantwortlich ist.</para>
|
|
|
|
<para><varname>DOC</varname> (ohne die Erweiterung
|
|
<filename>.xml</filename>) ist der Name des Hauptdokuments des
|
|
Verzeichnisses, in dem sich das Makefile befindet. Mit
|
|
<varname>SRCS</varname>-Anweisungen geben Sie alle Dokumente an,
|
|
aus denen das Dokument besteht. Zusätzlich binden Sie
|
|
damit wichtige Dateien ein, deren Änderung einen erneuten
|
|
Bau der Dokumentation erforderlich macht.</para>
|
|
|
|
<para>Mit <varname>FORMATS</varname> geben Sie an, in welchen
|
|
Formaten die Dokumentation gebaut werden soll.
|
|
<varname>INSTALL_COMPRESSED</varname> enthält die
|
|
Standardvorgaben, die beim Bau komprimierter Pakte der
|
|
Dokumentation verwendet werden sollen. Der Variable
|
|
<varname>INSTALL_ONLY_COMPRESS</varname> (die in der
|
|
Voreinstellung leer ist) wird nur dann ein Wert zugewiesen,
|
|
wenn ausschließlich komprimierte Pakete der Dokumentation
|
|
erstellt werden sollen.</para>
|
|
|
|
<para>Die Variable <varname>DOC_PREFIX</varname> und die
|
|
verschiedenen Include-Anweisungen sollten Ihnen ebenfalls
|
|
bereits vertraut sein.</para>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 xml:id="make-includes">
|
|
<title>&man.make.1;-Includes des &os; Documentation Projects</title>
|
|
|
|
<para>Diese Dateien lassen sich am besten verstehen, indem man sich
|
|
deren Inhalt näher ansieht. Konkret handelt es sich dabei
|
|
um folgende Dateien:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><filename>doc.project.mk</filename> ist die
|
|
Haupt-Include-Datei, die bei Bedarf alle folgenden
|
|
Include-Dateien enthält.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><filename>doc.subdir.mk</filename> sorgt dafür, dass
|
|
alle benötigten Verzeichnisse (und Unterverzeichnisse)
|
|
beim Bau der Dokumentation durchlaufen werden.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><filename>doc.install.mk</filename> definiert Variablen,
|
|
die die Installation der Dokumentation beeinflussen.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><filename>doc.docbook.mk</filename> wird verwendet, wenn
|
|
die Variable <varname>DOCFORMAT</varname> den Wert
|
|
<literal>docbook</literal> hat und die Variable
|
|
<varname>DOC</varname> gesetzt ist.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<sect2 xml:id="includes-doc-project-mk">
|
|
<title><filename>doc.project.mk</filename></title>
|
|
|
|
<para>Diese Datei hat folgenden Aufbau:</para>
|
|
|
|
<programlisting>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"</programlisting>
|
|
|
|
<sect3 xml:id="doc-project-mk-variables">
|
|
|
|
<title>Variablen</title>
|
|
|
|
<para><varname>DOCFORMAT</varname> und <varname>MAINTAINER</varname>
|
|
enthalten Standardwerte, falls ihnen über das
|
|
Dokument-Makefile keine anderen Werte zugewiesen werden.</para>
|
|
|
|
<para>Bei <varname>PREFIX</varname> handelt es sich um das
|
|
Präfix, unter dem die zum Bau der Dokumentation
|
|
erforderlichen <link linkend="tools">SGML-Werkzeuge</link>
|
|
installiert sind. In der Regel handelt es sich dabei um
|
|
<filename>/usr/local</filename>.</para>
|
|
|
|
<para><varname>PRI_LANG</varname> 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".</para>
|
|
|
|
<note>
|
|
<para><varname>PRI_LANG</varname> 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.</para>
|
|
</note>
|
|
</sect3>
|
|
|
|
<sect3 xml:id="doc-project-mk-conditionals">
|
|
<title>Bedingungen</title>
|
|
|
|
<para>Die Zeile <literal>.if defined(DOC)</literal> ist ein
|
|
Beispiel für eine &man.make.1;-Bedingung, die (analog zum
|
|
Einsatz in anderen Programmen) festlegt, was geschehen soll,
|
|
wenn eine Bedingung "wahr" oder "falsch" ist.
|
|
<literal>defined</literal> ist eine Funktion, die
|
|
zurückgibt, ob die angegebene Variable existiert oder
|
|
nicht.</para>
|
|
|
|
<para><literal>.if ${DOCFORMAT} == "docbook"</literal> testet,
|
|
ob die Variable <varname>DOCFORMAT</varname> den Wert
|
|
<literal>"docbook"</literal> hat. Ist dies der Fall, wird
|
|
<filename>doc.docbook.mk</filename> mit in den Bau
|
|
aufgenommen.</para>
|
|
|
|
<para>Die zwei <literal>.endif</literal>s schließen die
|
|
zwei weiter oben definierten Bedingungen.</para>
|
|
</sect3>
|
|
</sect2>
|
|
|
|
<sect2 xml:id="includes-doc-subdir-mk">
|
|
<title><filename>doc.subdir.mk</filename></title>
|
|
|
|
<para>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.</para>
|
|
|
|
<sect3 xml:id="doc-subdir-mk-variables">
|
|
<title>Variablen</title>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><varname>SUBDIR</varname> legt die Unterverzeichnisse
|
|
fest, deren Inhalt beim Bau der Dokumentation inkludiert
|
|
werden muss.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Mit <varname>ROOT_SYMLINKS</varname> 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
|
|
<varname>PRI_LANG</varname> festgelegt wird).</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><varname>COMPAT_SYMLINK</varname> wird im Abschnitt
|
|
<link linkend="sub-make">Unterverzeichnis-Makefile</link>s
|
|
beschrieben.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect3>
|
|
|
|
<sect3 xml:id="doc-subdir-mk-targets-macro">
|
|
<title>Targets und Makros</title>
|
|
|
|
<para>Abhängigkeiten
|
|
(<foreignphrase>Dependencies</foreignphrase>) werden
|
|
folgendermaßen definiert:
|
|
<literal><replaceable>target</replaceable>
|
|
<replaceable>abhaengigkeit1 abhaengigkeit2 ...</replaceable></literal>.
|
|
Um <literal>target</literal> zu bauen, müssen Sie zuvor
|
|
die angegebenen Abhängigkeiten bauen.</para>
|
|
|
|
<para>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.</para>
|
|
|
|
<para>Die spezielle Abhängigkeit <literal>.USE</literal>
|
|
definiert das Äquivalent eines Makros.</para>
|
|
|
|
<programlisting>_SUBDIRUSE: .USE
|
|
.for entry in ${SUBDIR}
|
|
@${ECHO} "===> ${DIRPRFX}${entry}"
|
|
@(cd ${.CURDIR}/${entry} && \
|
|
${MAKE} ${.TARGET:S/realpackage/package/:S/realinstall/install/} DIRPRFX=${DIRPRFX}${entry}/ )
|
|
.endfor</programlisting>
|
|
|
|
<para>In diesem Beispiel kann <buildtarget>_SUBDIRUSE</buildtarget>
|
|
nun als Makro, welches die angegebenen Befehle ausführt,
|
|
verwendet werden, indem es im Makefile als Abhängigkeit
|
|
angegeben wird.</para>
|
|
|
|
<para>Was unterscheidet dieses Makro nun von beliebigen anderen
|
|
Targets? Der Hauptunterschied ist, dass es
|
|
<emphasis>nach</emphasis> den Anweisungen der Bauprozedur,
|
|
in der es als Abhängigkeit angegeben ist, ausgeführt
|
|
wird. Außerdem ändert es die Variable
|
|
<varname>.TARGET</varname> (die den Namen des aktuell gebauten
|
|
Targets enthält) nicht.</para>
|
|
|
|
<programlisting>clean: _SUBDIRUSE
|
|
rm -f ${CLEANFILES}</programlisting>
|
|
|
|
<para>In diesem Beispiel führt <buildtarget>clean</buildtarget>
|
|
das Makro <buildtarget>_SUBDIRUSE</buildtarget> aus, nachdem es
|
|
den Befehl <command>rm -f ${CLEANFILES}</command> erfolgreich
|
|
ausgeführt hat. Dadurch löscht
|
|
<buildtarget>clean</buildtarget> zwar beim Wechsel in ein neues
|
|
<emphasis>Unterverzeichnis</emphasis> beim Bau erstellte
|
|
Dateien, aber nicht beim Wechsel aus einem Unterverzeichnis
|
|
in ein übergeordnetes Verzeichnis.</para>
|
|
|
|
<sect4 xml:id="doc-subdir-mk-provided-targets">
|
|
<title>Vorhandene Targets</title>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><buildtarget>install</buildtarget> und
|
|
<buildtarget>package</buildtarget> arbeiten nacheinander
|
|
alle Unterverzeichnisse ab und rufen dabei jeweils ihre
|
|
realen Versionen (<buildtarget>realinstall</buildtarget>
|
|
beziehungsweise <buildtarget>realpackage</buildtarget>)
|
|
auf.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><buildtarget>clean</buildtarget> entfernt alle
|
|
Dateien, die beim Bau der Dokumentation erzeugt wurden
|
|
(dies sowohl im aktuellen Verzeichnis als auch in allen
|
|
Unterverzeichnissen). <buildtarget>cleandir</buildtarget>
|
|
hat die gleiche Aufgabe, würde aber zusätzlich
|
|
die Objekt-Verzeichnisse löschen (falls diese
|
|
existieren).</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect4>
|
|
</sect3>
|
|
|
|
<sect3 xml:id="doc-subdir-mk-conditionals">
|
|
<title>Weitere Bedingungen</title>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><literal>exists</literal> gibt "wahr" zurück, wenn
|
|
die angegebene Datei bereits existiert.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>empty</literal> gibt "wahr" zurück, wenn
|
|
die angegebene Variable leer ist.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>target</literal> gibt "wahr" zurück, wenn
|
|
das angegebene Target noch nicht existiert.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect3>
|
|
|
|
<sect3 xml:id="doc-subdir-mk-looping">
|
|
<title>Schleifenkonstrukte in
|
|
<command>make (.for)</command></title>
|
|
|
|
<para><literal>.for</literal> 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.</para>
|
|
|
|
<programlisting>_SUBDIRUSE: .USE
|
|
.for entry in ${SUBDIR}
|
|
@${ECHO} "===> ${DIRPRFX}${entry}"
|
|
@(cd ${.CURDIR}/${entry} && \
|
|
${MAKE} ${.TARGET:S/realpackage/package/:S/realinstall/install/} DIRPRFX=${DIRPRFX}${entry}/ )
|
|
.endfor</programlisting>
|
|
|
|
<para>Falls das Verzeichnis <varname>SUBDIR</varname> leer ist,
|
|
würde in unserem Beispiel keine Aktion erfolgen.
|
|
Enthält das Verzeichnis hingegen ein oder mehrere
|
|
Elemente, werden die Anweisungen zwischen
|
|
<literal>.for</literal> und <literal>.endfor</literal>
|
|
für jedes Element ausgeführt, wobei
|
|
<varname>entry</varname> durch das jeweilige Element ersetzt
|
|
werden würde.</para>
|
|
</sect3>
|
|
</sect2>
|
|
</sect1>
|
|
</chapter>
|