# Perforce Jam

Perforce Jam ist ein quelloffenes Build-System, geschrieben von Christopher Seiwald bei Perforce Software. Es kann als Ersatz für make verwendet werden. Jam läuft auf Unix (inklusive vielen Derivaten), OpenVMS, Linux, Windows NT, und MacOS. Mithilfe von MinGW oder Cygwin läuft Jam auch auf Windows 9.x. Man kann es, genau wie make, auch zusammen mit Autoconf verwenden. Jedoch ist das dank der Portabilität von Jam nicht immer nötig.
Ein Build-System ist für die automatische Übersetzung von Computerprogrammen zuständig. Es ruft unter verschiedenen Systemen die jeweiligen Compiler und Linker auf. Außerdem werden notwendige Dateien kopiert oder generiert. Oft wird auch eine automatische Installation/Deinstallation oder die Generierung eines Downloadpakets für Endnutzer angeboten.

## Vorteile gegenüber make

* Jamfiles, also die Regeln zum Übersetzen des Programms, sind normalerweise portabel, das heißt, sie können auf allen unterstützten Systemen ohne Anpassungen ausgeführt werden.
* Abhängigkeiten müssen nicht explizit angegeben werden, Jam findet sie automatisch in den C++- oder anderen unterstützten Quelldateien.
* Die Sprache ist sehr einfach und übersichtlich. Jamfiles sind erheblich kürzer als Makefiles.
* Die sogenannte Jambase, die die mitgelieferten Regeln enthält, bringt sehr viele komfortable Regeln mit, was in make alles selbst geschrieben, bzw. mit Automake generiert werden müsste.
* Die Sprache ist nach Belieben erweiterbar, auch Regeln aus der Jambase können überschrieben werden.

## Sprache

Die Sprache von Jam hat einige Besonderheiten. Alle Sprachbestandteile müssen mit einem Leerzeichen abgetrennt werden, ansonsten würden sie als Teil einer Zeichenkette, dem einzigen Datentyp in Jam, interpretiert werden. Über sogenannte Actions kann innerhalb des Jamfiles bash- bzw. Batch-Code ausgeführt werden.
Ein einfaches Jamfile:

## Gebrauch

Im Wurzelverzeichnis des Softwareprojekts wird das Kommando jam aufgerufen. Dabei wird dann zunächst die Datei Jamfile inklusive allen darin eingebunden Dateien ausgelesen und danach die notwendigen Schritte zum Übersetzen des Programms ausgeführt. Als Kommandozeilenparameter kann ein bestimmtes Jamfile mit -fDateiname oder ein gewünschtes Target angegeben werden. Mit diesen Targets kann z. B. nur ein Bestimmter Teil des Programms übersetzt werden. Zur Installation des Programms wird gewöhnlich jam install aufgerufen.

## Varianten

FT Jam ist vollkommen rückwärtskompatibel zu Perforce Jam. Es hat zusätzliche eingebaute Regeln und Unterstützung für mehr Compiler. Außerdem wird Windows 9.x unterstützt und es wurden viele Schönheitsfehler korrigiert.
KJam ist eine komplette Neuschreibung von Jam. Es soll stabiler, einfacher und leistungsfähiger sein. KJam unterstützt neben anderen Verbesserungen netzwerkübergreifendes Kompilieren.
Boost Jam, auch BJam oder Boost.Jam, basiert auf FT Jam und ist auch rückwärtskompatibel zu Perforce Jam. Es wurde im Rahmen der Boost C++ Libraries entwickelt.
Autojam bietet eine erweiterte Jambase mit mehr Regeln.
Haiku Jam wird standardmäßig von Haiku (Betriebssystem) benutzt.
Platinum C++ Jam auch Pt-Jam. Es wurde im Rahmen der Platinum C++ Framework entwickelt.
JamPlus fügt der Perforce-Originalversion von Jam neue Features hinzu und wurde um Patches aus der Jamming mailing list und dem Perforce Public Depot erweitert.