Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Web Analytics
Cookie Policy Terms and Conditions Make - Wikipedia

Make

aus Wikipedia, der freien Enzyklopädie

Der korrekte Titel dieses Artikels lautet „make“. Diese Schreibweise ist aufgrund technischer Einschränkungen nicht möglich.

make (engl. machen) ist ein Computerprogramm, das Shellskript-ähnlich Kommandos in Abhängigkeit von Bedingungen ausführt. Es wird hauptsächlich im Unixbereich bei der Softwareentwicklung eingesetzt.

Genutzt wird es beispielsweise, um in einem Projekt, das aus vielen verschiedenen Dateien mit Quellcode besteht, automatisiert alle Arbeitsschritte (Übersetzung, Linken, Dateien kopieren etc.) zu steuern, bis hin zum fertigen ausführbaren Programm.

Inhaltsverzeichnis

[Bearbeiten] Erklärung

Make liest ein sogenanntes Makefile, in dem der Übersetzungsprozess von Programmen formalisiert erfasst ist. Diese Formalisierung beschreibt, welche Quelltextdateien der Compiler zu welchen Objektdateien verarbeitet, und welche Objektdateien vom Linker dann zu Programmbibliotheken oder ausführbaren Programmen verbunden werden. Alle Schritte erfolgen unter Beachtung der Abhängigkeiten, die möglicherweise durch die Dateiorganisation gegeben sein können.

Wenn das Makefile vom make-Programm abgearbeitet wird, wird eine Umwandlung etwa einer Quelldatei in eine Objektdatei nur dann vorgenommen, wenn die Quelldatei neuer als die Objektdatei ist. Bei der Entwicklung großer Programmpakete mit vielen Quelldateien und vielen ausführbaren Programmen entfällt so die Notwendigkeit, bei einer Reihe kleiner Veränderungen alle Compilationen erneut durchzuführen. Der Erfolg dieser Sparmaßnahme hängt natürlich von der korrekten Angabe der Dateiabhängigkeiten ab. Alle Abhängigkeiten müssen vollständig und korrekt im Makefile beschrieben sein - was bei großen Projekten nicht leicht zu realisieren ist. Insbesondere bei Programmänderungen oder -erweiterungen können neue Abhängigkeiten entstehen. Diese müssen sofort im Makefile eingetragen werden. Dies wird durch Hilfsprogramme wie mkmf unterstützt.

Die von make ausgeführten Befehle sind nicht auf Compiler oder Linker beschränkt. Jedes Werkzeug, das der Kommandozeileninterpreter zur Verfügung stellt, kann benutzt werden, um die gewünschten Dateimanipulationen zu erreichen. So kann man z. B. automatisch Bilder aus Texten erzeugen.

make hat sich in großen Bereichen der Software-Entwicklung durchgesetzt, hat aber – gerade bei großen Projekten – einige Probleme (siehe Literatur). Daher wurden immer wieder Versuche gemacht, einen Nachfolger zu finden und zu etablieren (siehe Alternativen).

[Bearbeiten] Prinzip

Das Erstellen einer Datei wird im Makefile als ein Ziel bezeichnet. Die Randbedingungen dazu werden in einem Eintrag beschrieben. Beispiel

A: B C
     D

Diese Zeile bedeutet: Ziel A hängt von den Zielen B und C ab. ("Hängt ab von" bedeutet meistens "wird erstellt aus".) Wenn A erstellt werden soll, werden B und C betrachtet. Ist eins von beiden jünger als A, wird D ausgeführt, um A neu zu erstellen. Ist A jünger als B und C, wird A als auf dem neuesten Stand betrachtet.

[Bearbeiten] Beispiel für ein Makefile

Ein Programm prog soll aus den beiden Quelldateien foo.c und bar.c so erzeugt werden, dass immer möglichst wenig Übersetzungs- und Bindevorgänge benötigt werden, wenn nur eine der beiden Quelldateien geändert wird.

CC = cc
LD = ld

prog: foo.obj bar.obj
        $(LD) -o prog foo.obj bar.obj

foo.obj: foo.c
        $(CC) -c foo.c

bar.obj: bar.c
        $(CC) -c bar.c

In den ersten beiden Zeilen wird angegeben, mit welchen Programmen die Kompilierung und das Linken ausgeführt werden sollen. Die dritte Zeile bedeutet, dass das Programm prog aus den Teilen foo.obj und bar.obj hergestellt wird. Die darauffolgende Zeile gibt an, wie mit welchem Werkzeug – hier ein Linker – dies erfolgen soll. Zeilen, die – wie in diesem Fall – Programme aufrufen, müssen mit einem Tabulatorzeichen beginnen. Die nächste Zeile gibt an, dass foo.obj aus foo.c hergestellt wird, und zwar in der sechsten Zeile durch Aufruf von cc dem C-Kompiler. Die beiden letzten Zeilen sind analog.

Der Vorgang wird dann auf der Kommandozeile mittels make prog gestartet. Wird kein Parameter angegeben, führt make das zuerst definierte Ziel (hier prog) aus. In dem obigen Beispiel hätte also make die gleiche Wirkung wie make prog.

Das vorliegende Beispiel zeigt lediglich die einfachste Form eines Makefiles, es gibt Methoden wie z. B. Patternregeln, die das Makefile mächtiger machen.

[Bearbeiten] Umfeld

Die Entwicklung großer Programme und Programmpakete, die aus vielen einzelnen Quelltext-Dateien bestehen und Abhängigkeiten zu separaten Bibliotheken besitzen, ist ohne Make oder ähnliche Hilfsmittel kaum mehr denkbar. In der Welt des Open Source versteht es sich von selbst, dass mit dem Quellcode eines Projekts auch das Makefile veröffentlicht wird.

Besonders bei größeren Programmen wird das Makefile von den Entwicklern nicht direkt geschrieben, sondern mittels unterschiedlicher Programme aus einfacheren Regeln erstellt. Hierzu werden üblicherweise die GNU autotools wie autoconf und automake oder auch mkmf oder qmake verwendet. Die Compiler für C und C++ aus der GNU Compiler Collection geben die Abhängigkeiten der Programme von ihren Header-Dateien an (Option -M).

[Bearbeiten] Alternativen zum Make-Befehl

(erhebt keinen Anspruch auf Vollständigkeit)

  • Derivate von Make, sind z. B. GNU Make, nmake (Microsoft), Turbo Make (Borland), JMake, Opus Make, MKS cMake, imake.
  • makepp ist zwar ein Derivat von (GNU) make, bietet aber darüberhinaus einen integrierten erweiterbaren Befehls- und Include-Parser um implizite Abhängigkeiten automatisch zu erkennen. Auch geänderte Befehlsoptionen u.ä. Rahmenbedingungen werden erkannt. Das große make Problem mit Rekursion kann elegant umgangen werden, um korrekte Aufbauten zu garantieren. Darüberhinaus ist Perl auf allen Ebenen integrierbar. http://makepp.sf.net
  • SCons: Python-implementiertes, plattform-übergreifendes System mit vielen Verbesserungen gegenüber 'make'. Integriert auch einige Features von automake/autoconf. Seine Stärke kommt daher, dass in den "SConstruct" genannten 'makefiles' die gesamte Funktionalität der Programmiersprache Python genutzt werden kann. Siehe dazu http://scons.sourceforge.net/.
  • Apache Ant und Apache Maven. XML-basierende Systeme mit demselben Zweck, die mit Hilfe von Java erweitert werden können.
  • Vesta ist ein Software Configuration Management Werkzeug mit integriertem Build Tool: http://www.vestasys.org
  • Jam ist ein Build Werkzeug aus der Boost-Bibliothek, der Erweiterung der C++-Standardbibliothek der Programmiersprache C++.
  • Rant: Ein in Ruby implementiertes Werkzeug, auch die makefiles werden in Ruby geschrieben. Siehe dazu http://make.rubyforge.org/.
  • Rake: Ebenfalls in Ruby implementiertes Werkzeug mit in Ruby geschriebenen Rakefiles. Siehe auch http://rake.rubyforge.org/.
  • In einer integrierten Entwicklungsumgebung (IDE) wird das Ganze in eine grafische Benutzeroberfläche verpackt und ist subjektiv leichter zu handhaben. IDEs gibt es für fast jede Sprache und jedes Betriebssystem.
  • CruiseControl
  • AAP

[Bearbeiten] Literatur

[Bearbeiten] Weblinks

wikt:
Wiktionary
Wiktionary: make – Bedeutungserklärungen, Wortherkunft, Synonyme und Übersetzungen
Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu