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:
Main hello : hello.cc ; Library mytools : mytools.cc ; LinkLibraries hello : mytools ;
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.
Weblinks
- Perforce Software (englisch)
- Perforce Jam (englisch)
- FT Jam (englisch)
- KJam (englisch)
- Boost Jam (englisch)
- <templatestyles src="Webarchiv/styles.css" />{{#if:20110719183355
| {{#ifeq: 20110719183355 | *
| {{#if: AutoJam | {{#invoke:WLink|getEscapedTitle|AutoJam}} | {{#invoke:Webarchiv|getdomain|http://autojam.berlios.de}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|20110719183355}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: AutoJam | {{#invoke:WLink|getEscapedTitle|AutoJam}} | {{#invoke:Webarchiv|getdomain|http://autojam.berlios.de}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20110719183355}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: AutoJam | {{#invoke:WLink|getEscapedTitle|AutoJam}} | {{#invoke:Webarchiv|getdomain|http://autojam.berlios.de}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: AutoJam | {{#invoke:WLink|getEscapedTitle|AutoJam}} | {{#invoke:Webarchiv|getdomain|http://autojam.berlios.de}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: AutoJam | {{#invoke:WLink|getEscapedTitle|AutoJam}} | {{#invoke:Webarchiv|getdomain|http://autojam.berlios.de}} }} ({{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: AutoJam | {{#invoke:WLink|getEscapedTitle|AutoJam}} | {{#invoke:Webarchiv|getdomain|http://autojam.berlios.de}} }}
}}}}}}}}{{#if:
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:20110719183355|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://autojam.berlios.de}}
|| {{#if: || }}
}}{{#if: AutoJam
| {{#if: {{#invoke:WLink|isBracketedLink|AutoJam}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://autojam.berlios.de%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://autojam.berlios.de%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://autojam.berlios.de }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}} (englisch)
- Platinum C++ Jam (englisch)
- JamPlus (englisch)