Das FreeBSD Porter-Handbuch
Zurück | Kapitel 6. Besonderheiten | Weiter

# 6.3. Build-Mechanismen

## 6.3.1. Paralleles Bauen von Ports

Das Ports-Framework von FreeBSD unterstützt das parallele Bauen von Ports, indem es mehrere `make`-Instanzen ausführt, damit SMP-Systeme ihre gesamte CPU-Rechenleistung ausnützen können und so das Bauen von Ports schneller und effektiver werden kann.

Dies ermöglicht der Parameter `-jX` an make(1), wenn Code von Drittanbietern kompiliert wird. Leider können nicht alle Ports wirklich gut mit dem Parallelbau umgehen. Deshalb ist es erforderlich, dass dieses Feature explizit durch `MAKE_JOBS_SAFE=yes` irgendwo unterhalb des Abschnitts für Abhängigkeiten im `Makefile` aktiviert wird.

Eine weitere Möglichkeit im Umgang mit dieser Option besteht für den Maintainer darin, `MAKE_JOBS_UNSAFE=yes` zu setzen. Diese Variable wird dann verwendet, wenn ein Port bekannterweise mit `-jX` nicht gebaut werden kann, der Benutzer jedoch für alle Ports den Mehrprozessorbau durch `FORCE_MAKE_JOBS=yes` in `/etc/make.conf` erzwingt.

## 6.3.2. `make`, `gmake` und `imake`

Wenn Ihr Port GNU make benutzt, dann setzen Sie bitte `USE_GMAKE=yes`.

Tabelle 6-1. Port-Variablen im Zusammenhang mit gmake

Variable | Bedeutung
--- | ---
`USE_GMAKE` | Der Port benötigt `gmake` für den Build.
`GMAKE` | Der ganze Pfad zu `gmake`, wenn es nicht im `PATH` ist.

Wenn Ihr Port eine X-Applikation ist, die `Makefile`-Dateien aus `Imakefile`-Dateien mit imake erzeugt, dann setzen Sie `USE_IMAKE=yes`. Das sorgt dafür, dass die Konfigurationsphase automatisch ein `xmkmf -a` ausführt. Wenn das Flag `-a` ein Problem für Ihren Port darstellt, setzen Sie `XMKMF=xmkmf`. Wenn der Port imake benutzt, aber das `install.man`-Target nicht versteht, dann sollte `NO_INSTALL_MANPAGES=yes` gesetzt werden.

Wenn das `Makefile` im Quelltext Ihres Ports etwas anderes als `all` als Haupt-Build-Target hat, setzen Sie `ALL_TARGET` entsprechend. Das Gleiche gilt für `install` und `INSTALL_TARGET`.

## 6.3.3. `configure` Skript

Wenn Ihr Port ein `configure`-Skript benutzt, um `Makefile`-Dateien aus `Makefile.in`-Dateien zu erzeugen, setzen Sie `GNU_CONFIGURE=yes`. Wenn Sie dem `configure`-Skript zusätzliche Argumente übergeben wollen (das Vorgabeargument ist `--prefix=${PREFIX} --infodir=${PREFIX}/${INFO_PATH} --mandir=${MANPREFIX}/man --build=${CONFIGURE_TARGET}`), setzen Sie diese zusätzlichen Argumente in `CONFIGURE_ARGS`. Zusätzliche Umgebungsvariablen können überdie Variable `CONFIGURE_ENV` übergeben werden.

Tabelle 6-2. Variablen für Ports, die `configure` benutzen

Variable | Bedeutung
--- | ---
`GNU_CONFIGURE` | Der Port benutzt ein `configure`-Skript, um das Bauen vorzubereiten.
`HAS_CONFIGURE` | Wie `GNU_CONFIGURE`, nur dass kein Standard-Konfigurations-Target zu `CONFIGURE_ARGS` hinzugefügt wird.
`CONFIGURE_ARGS` | Zusätzliche Argumente für das `configure`-Skript.
`CONFIGURE_ENV` | Zusätzliche Umgebungsvariablen für die Abarbeitung des `configure`-Skriptes.
`CONFIGURE_TARGET` | Ersetzt das Standard-Konfigurations-Target. Vorgabewert ist `${MACHINE_ARCH}-portbld-freebsd${OSREL}`.

## 6.3.4. Benutzung von `scons`

Wenn Ihr Port SCons benutzt, definieren Sie `USE_SCONS=yes`.

Tabelle 6-3. Variablen für Ports, die `scons` benutzen

Variable | Bedeutung
--- | ---
`SCONS_ARGS` | Port-spezifische SCons-Argumente, die der SCons-Umgebung übergeben werden.
`SCONS_BUILDENV` | Variablen, die in der System-Umgebung gesetzt werden sollen.
`SCONS_ENV` | Variablen, die in der SCons-Umgebung gesetzt werden sollen.
`SCONS_TARGET` | Letztes Argument, das SCons übergeben wird – ähnlich `MAKE_TARGET`.

Um `SConstruct` im Quelltext alles, was SCons in `SCONS_ENV` übergeben wird, respektieren zu lassen (das ist hauptsächlich `CC/CXX/CFLAGS/CXXFLAGS`), patchen Sie `SConstruct`, sodass das Build `Environment` wie folgt konstruiert wird:

    env = Environment(**ARGUMENTS)

Es kann dann mit `env.Append` und `env.Replace` modifiziert werden.

Zurück | Zum Anfang | Weiter
Ports mit beschränkter Verbreitung | Nach oben | Benutzung von GNU autotools

Fragen zum FreeBSD Ports-System richten Sie bitte an <ports@FreeBSD.org>, Fragen zu diesem Dokument hingegen an <de-bsd-translators@de.FreeBSD.org>.