www.wikidata.de-de.nina.az
Dieser Artikel behandelt das Build Management Tool Fur die Zeitschrift siehe Make make englisch fur machen erstellen ist ein Build Management Tool das Kommandos in Abhangigkeit von Bedingungen ausfuhrt Es wird hauptsachlich bei der Softwareentwicklung als Programmierwerkzeug eingesetzt 2 MakeBasisdatenMaintainer diverseEntwickler Stuart Feldman diverseErscheinungsjahr 1976 1 Betriebssystem POSIX Linux Unix portiert auf diverse andere PlattformenProgrammiersprache CKategorie Build Management ToolLizenz diverseGenutzt wird es beispielsweise um in Projekten die aus vielen verschiedenen Dateien mit Quellcode bestehen automatisiert alle Arbeitsschritte Ubersetzung Linken Dateien kopieren etc zu steuern bis hin zum fertigen ausfuhrbaren Programm make ist jedoch so flexibel ausgelegt dass es auch beliebige andere Aufgaben steuern kann bei denen die zeitliche Abhangigkeit von Dateien eine Rolle spielt 2 Das Hilfsprogramm make ist Teil des POSIX Standards dessen gegenwartige Bezeichnung IEEE Std 1003 1 2008 Edition lautet aquivalent dazu Single UNIX Specification V3 SUSv3 Inhaltsverzeichnis 1 Erklarung 2 Prinzip 3 Beispiel fur ein Makefile 4 Anwendung 5 Neuere Entwicklungen 6 Alternativen zum make Befehl 7 Literatur 8 Weblinks 9 EinzelnachweiseErklarung Bearbeitenmake liest ein sogenanntes Makefile man beachte die Grossschreibung welche bei Unix Dateisystemen unterschieden wird in dem die Abhangigkeiten des Ubersetzungsprozesses von Programmen formalisiert erfasst sind Diese Formalisierung beschreibt welche Quelltextdateien auf welche Weise durch den Compiler oder durch andere Programme zu welchen Objektdateien bzw Ergebnissen verarbeitet werden bzw welche Objektdateien vom Linker zu Programmbibliotheken oder ausfuhrbaren Programmen verbunden werden Alle Schritte erfolgen unter Beachtung der im Makefile erfassten Abhangigkeiten 2 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 bereits vorliegende Version der Ergebnisdatei ist bzw wenn keine Ergebnisdatei vorhanden ist Bei der Entwicklung grosser Programmpakete mit vielen Quelldateien und vielen ausfuhrbaren Programmen entfallt so die Notwendigkeit bei einer Reihe kleiner Veranderungen alle Kompilierungen erneut durchzufuhren 2 Der Erfolg dieser Sparmassnahme hangt von der korrekten Angabe der Dateiabhangigkeiten ab Alle Abhangigkeiten mussen vollstandig und korrekt im Makefile beschrieben sein was bei grossen Projekten nicht leicht zu realisieren ist Insbesondere bei Programmanderungen oder erweiterungen konnen neue Abhangigkeiten entstehen Zur korrekten Funktion mussen diese Abhangigkeiten in das Makefile eingetragen werden In den fruhen 1980er Jahren wurden dazu haufig Hilfsprogramme wie a href Mkmf html title Mkmf mkmf a oder makedepend verwendet Seit Mitte der 1980er Jahre gibt es in die Make Programme integrierte Methoden zur automatischen Erzeugung der Abhangigkeitslisten z B in SunPro make bzw in die Makefiles integrierte Regeln zu deren Erzeugung Die von make ausgefuhrten Befehle sind nicht auf Compiler oder Linker beschrankt Jedes Werkzeug das der Kommandozeileninterpreter zur Verfugung stellt kann benutzt werden um die gewunschten Dateimanipulationen zu erreichen So kann man z B automatisch Bilder aus Texten erzeugen make hat sich in grossen Bereichen der Software Entwicklung durchgesetzt hatte aber bis ca Mitte der 1980er Jahre gerade bei grossen Projekten solange die automatisierte Erzeugung samtlicher Abhangigkeitsregeln nicht gelost war Probleme siehe Literatur Daher wurden immer wieder Versuche gemacht einen Nachfolger zu finden und zu etablieren siehe Alternativen Prinzip BearbeitenDas Erstellen einer Datei wird im Makefile als ein Ziel Target bezeichnet Die Randbedingungen dazu werden in einem Eintrag beschrieben 3 Beispiel A B C cmd A Diese Zeile bedeutet Ziel A hangt von den Quellen B und C ab Hangt ab von bedeutet meistens wird erstellt aus 4 Wenn A erstellt werden soll werden B und C betrachtet Ist eins von beiden junger als A wird cmd A ausgefuhrt um A neu zu erstellen Ist A junger als B und C wird A als aktuell betrachtet und cmd A daher nicht ausgefuhrt B oder C als Quellen von A konnen nun wiederum Ziele aus weiteren Make Vorschriften sein B D E cmd B Zuerst wird A betrachtet Da A von B abhangt wird also B betrachtet bevor fur A weiteres ausgefuhrt wird Insgesamt wird damit die Ausfuhrung von Anweisungen ruckwarts beschrieben Ausgangspunkt ist das letztliche Ziel A 4 Diese Betrachtung muss bei Quellen enden die vorhanden sind und fur die es keine weitere Bildungsvorschrift gibt Das sind die eigentlichen Quellen der gesamten Generierung Ist eine Quelle nicht vorhanden es wird aber auch keine Bildungsvorschrift gefunden kann der maker nur mit einer Fehlermeldung reagieren don t know how to make Ursache fur einen solchen Fehler kann entweder ein Fehler im Makefile oder das tatsachliche Fehlen der Quelle sein Definition von Ableitungsregeln In der obigen Darstellung konnen A B usw benannte Files mit Verzeichnisangabe sein Es ist aber auch moglich unter Angabe der File Extension allgemeine Regeln zu definieren c o CC CFLAGS c o lt Im obigen Beispiel befindet sich eine sogenannte Schlussfolgerungsregel die in Form einer Suffixregel verfasst ist 5 Beispiel fur ein Makefile BearbeitenDas vorliegende Beispiel zeigt lediglich die einfachste Form eines Makefiles Es gibt daruber hinaus Methoden wie z B Pattern Regeln die das Makefile machtiger machen 4 Ein Programm prog soll aus den beiden Quelldateien foo c und bar c so erzeugt werden dass immer moglichst wenig Ubersetzungs und Bindevorgange benotigt werden wenn nur eine der beiden Quelldateien geandert wird CC cc LD ld prog foo o bar o LD o prog foo o bar o foo o foo c CC c foo c bar o bar c CC c bar c In den ersten beiden Zeilen werden globale Variablen definiert welche die Programmnamen fur den Compiler und den Linker enthalten Zeile 4 definiert eine Sprungmarke im Makefile die targets genannt werden die Ausdrucke foo o und bar o rufen die in den Zeilen 7 und 10 definierten targets zuerst in der angegebenen Reihenfolge auf bevor letztendlich das Kommando in Zeile 5 ausgefuhrt wird In Zeile 5 wird ein Kommando aus der globalen Variable LD und einigen Parametern zusammengesetzt Die beiden Dateien foo o und bar o stehen zur Verfugung weil zuvor bereits die beiden anderen targets ausgefuhrt wurden welche diese Dateien erzeugt haben Die nachste Zeile gibt an dass foo o aus foo c hergestellt wird und zwar in der achten Zeile durch Aufruf von cc dem C Compiler Die beiden letzten Zeilen sind analog Zwischen den Namen der Sprungmarken und den unter ihnen verarbeiteten Dateien besteht kein zwingender Zusammenhang Anweisungen die unter einer Sprungmarke ausgefuhrt werden beginnen stets mit einem Horizontal Tabulatorzeichen Der Vorgang wird auf der Kommandozeile mittels make prog gestartet Wird kein Parameter angegeben fuhrt make das zuerst definierte Ziel hier prog aus In dem obigen Beispiel hatte also make die gleiche Wirkung wie make prog Anwendung BearbeitenDie Entwicklung grosser Programme und Programmpakete die aus vielen einzelnen Quelltextdateien bestehen und Abhangigkeiten zu separaten Bibliotheken besitzen ist ohne make oder ahnliche Hilfsmittel kaum mehr denkbar In der Welt des Open Source ist es ublich dass mit dem Quellcode eines Projekts auch das Makefile veroffentlicht wird um das Kompilieren einer Software zu vereinfachen Neuere Entwicklungen BearbeitenBesonders bei grosseren Programmen wird das Makefile von den Entwicklern nicht immer direkt geschrieben sondern entweder mittels unterschiedlicher Programme aus einfacheren Regeln erstellt oder es werden machtigere Systeme verwendet Eine Methode zur automatischen Erzeugung von komplexen Makefiles ist die Verwendung von Praprozessoren wie den GNU autotools autoconf und automake oder auch mkmf qmake oder CMake 6 7 8 Methoden zur Reduzierung der Komplexitat der Makefiles beruhen auf machtigeren Systemen wie dem Programm nmake von David Korn 9 Dieses System ermoglicht Makefiles die lediglich tabellarisch die beteiligten Quelldateien auflisten Alternativen zum make Befehl BearbeitenGNU Make kurz gmake wird ublicherweise in Linux eingesetzt fur Windows gibt es nmake Als Nachfolger von UNIX make wurde nmake von AT amp T geschrieben es ermoglicht einfache tabellarische Makefiles makepp ist zwar ebenfalls ein Derivat von GNU make bietet aber daruber hinaus einen integrierten erweiterbaren Befehls und Include Parser um implizite Abhangigkeiten automatisch zu erkennen Auch geanderte Befehlsoptionen u a Rahmenbedingungen werden erkannt Das grosse make Problem mit Rekursion kann elegant umgangen werden um korrekte Aufbauten zu garantieren Daruber hinaus ist Perl auf allen Ebenen integrierbar 10 mk unter Plan 9 ist ebenfalls aus make entwickelt jedoch in die Richtung der Vereinfachung SCons Python implementiertes plattformubergreifendes System mit vielen Verbesserungen gegenuber make Integriert auch einige Features von automake autoconf Seine Starke kommt daher dass in den SConstruct genannten Makefiles die gesamte Funktionalitat der Programmiersprache Python genutzt werden kann Apache AntundApache Maven XML basierende Systeme mit demselben Zweck die mit Hilfe von Java erweitert werden konnen 11 12 Vesta ist ein SCM Werkzeug mit integriertem Build Tool Jam ein Buildwerkzeug aus der Boost Bibliothek der Erweiterung der C Standardbibliothek der Programmiersprache C Rake Ein in Ruby implementiertes Werkzeug mit in Ruby geschriebenen Rakefiles 13 A A P ein in Python geschriebenes Programm zur Automatisierung der Erstellung von Computerprogrammen vergleichbar mit make oder Ant Neben der klassischen Automatisierung des Erstellungsvorgangs ermoglicht es auch das Auffinden Herunterladen Installieren und Verandern von sowie die Fehlersuche in Computerprogrammen A A P besitzt eine integrierte Anbindung an CVS 14 Literatur BearbeitenHelmut Herold make Addison Wesley ISBN 3 8273 2095 X Thomas Peschel Findeisen Make ge packt Mitp Verlag ISBN 3 8266 1442 9 Robert Mecklenburg GNU make O Reilly ISBN 3 89721 408 3Weblinks Bearbeiten nbsp Wiktionary make Bedeutungserklarungen Wortherkunft Synonyme Ubersetzungen a href http www opengroup org onlinepubs 9699919799 utilities make html make 1 a maintain update and regenerate groups of programs Open Group Base Specification b make 1 b maintain program dependencies OpenBSD General Commands Manual b make 1 b maintain program dependencies FreeBSD General Commands Manual b make 1 b GNU make utility to maintain groups of programs Debian GNU Linux Ausfuhrbare Programme oder Shell Befehle Handbuchseite Peter Miller Recursive Make Considered Harmful PDF beschreibt die Probleme die durch rekursive Makefiles entstehen konnen was ein typisches Vorgehen ist Advanced Auto Dependency Generation mit make Make7 Ein portables Open Source make Programm geschrieben in Seed7 englisch Einzelnachweise Bearbeiten Interview with Stu Feldman 9 20 89 abgerufen am 22 November 2019 a b c d GNU Make Abgerufen am 3 Oktober 2018 englisch GNU Make What a Rule Looks Like Abgerufen am 3 Oktober 2018 englisch a b c GNU Make A Simple Makefile Abgerufen am 3 Oktober 2018 englisch GNU Make Old Fashioned Suffix Rules Abgerufen am 3 Oktober 2018 englisch An Introduction to the Autotools Abgerufen am 3 Oktober 2018 englisch qmake Manual Abgerufen am 3 Oktober 2018 englisch About CMake Abgerufen am 3 Oktober 2018 englisch MS C C The nmake Command Abgerufen am 3 Oktober 2018 englisch Makepp Home Page Abgerufen am 3 Oktober 2018 englisch Apache Ant About Abgerufen am 3 Oktober 2018 englisch Welcome to Apache Maven Abgerufen am 3 Oktober 2018 englisch RAKE Ruby Make Abgerufen am 3 Oktober 2018 englisch PyPI Aap Abgerufen am 3 Oktober 2018 englisch Normdaten Sachbegriff GND 4334388 0 lobid OGND AKS LCCN n92090404 VIAF 176684165 Abgerufen von https de wikipedia org w index php title Make amp oldid 232202043