WikiDer > Machen (Computerprogramm)

make (computerprogramma)
machen
EntwicklerStuart Feldman
Neueste Beta-Version19. Januar 2020
StatusAktiv
Kategorieautomatisches Software-Building-Tool
Portal  Portalsymbol  Informatik
Gratis Software

machen ist ein Computer Programm die als Werkzeug zum automatischen Erstellen großer Anwendungen für die Softwareentwicklung verwendet werden kann. Das Computerdateien die Anweisungen für make werden . enthalten Dateien erstellen erwähnt. Make verfolgt, welche Dateien seit der letzten Erstellung eines Projekts geändert wurden und startet das Compiler nur für diesen Quellcode-Dateien und die Dateien, die von diesen Dateien abhängen.

Make wird hauptsächlich verwendet für C/C Projekte, kann aber prinzipiell auch für fast jedes Softwareprojekt verwendet werden.

Make wurde ursprünglich 1977 von Stuart Feldman entwickelt Bell Labs. Heutzutage haben Ideen und computersprachenspezifische Compiler-Funktionen, um einen Build-Prozess zu verwalten, aber make wird immer noch häufig verwendet, insbesondere auf op Unix basierten Plattformen.

Ursprung

Es gibt mehrere Bauwerkzeuge mit der gleichen Funktionalität wie make, aber make ist eines der am häufigsten verwendeten Werkzeuge, hauptsächlich weil es standardmäßig in Unix enthalten ist, da PWB/UNIX 1.0, das verschiedene Werkzeuge für Softwareentwicklungsaufgaben enthielt. Make wurde ursprünglich 1977 von Stuart Feldman in den Bell Labs entwickelt. 2004 erhielt Feldman den ACM Software System Award für die Entwicklung dieses Computerprogramms[1].

Bevor make eingeführt wurde, war im Quellcode von Unix-Programmen oft ein Shell-Skript "make" und "install" enthalten. Da es möglich ist, mehrere Build-Ziele in einer einzigen Datei zu definieren und Abhängigkeiten zu definieren, war dies ein wichtiger Schritt in Richtung moderner Software-Building-Umgebungen.

Modernere Versionen

Make wurde mehrmals neu geschrieben oder von Grund auf neu entwickelt, mit der gleichen Funktionalität und Unterstützung für die gleichen Dateiformate, aber oft mit eigenen, nicht standardmäßigen Ergänzungen im Laufe der Zeit. Einige Versionen sind:

  • BSD make, das von der Arbeit von Adam de Boor abgeleitet ist und die Fähigkeit besitzt, parallel Ziele zu bauen. Diese Versionen leben in diversen weiter FreeBSD, NetBSD und OpenBSD. Insbesondere hat es bedingte Anweisungen und Schleifenoperationen, die während der analysieren eines Makefiles angewendet werden, sodass Makefiles mit einem einzigen Algorithmus generiert werden können, einschließlich der Möglichkeit, Build-Ziele zu generieren, während make ausgeführt wird.
  • GNU machen, das ist ein Teil der meisten GNU/LinuxInstallationen und wird oft in Verbindung mit den GNU-Build-System. Neben der traditionellen make-Funktionalität enthält es auch Funktionen zur automatischen Ermittlung von Build-Zielen, Abhängigkeiten oder Verweisen auf Dateien im aktuellen Verzeichnis anhand vorgegebener Muster (Englisch: Musterabgleich).
  • Microsoftnmake, das kommt mit Microsoft Visual Studio und/oder mit dem Microsoft Windows-SDK. Diese Version bietet im Vergleich zu den beiden oben genannten Versionen wenig Funktionalität. Diese Version ist übrigens nicht kompatibel mit einem anderen Programm namens nmake von AT&T Bell Labs für Unix.

Das POSIXstandard definiert die grundlegende Funktionalität und die unterstützten Operationen von make und wurde auf vielen Unix-basierten Versionen von make in unterschiedlichem Umfang implementiert. Im Allgemeinen sind einfache Makefiles zwischen verschiedenen Versionen ziemlich austauschbar. Einige Versionen von GNU make und BSD make betrachten zuerst Dateien namens "GNUmakefile" oder "BSDmakefile", was die Möglichkeit schafft, implementierungsspezifische Makefiles am selben Ort zu verwenden.

Vorteile und Nachteile

Wenn make ohne andere Tools verwendet wird, muss der Programmierer die Abhängigkeiten zwischen den Dateien für ein Projekt beibehalten. Dieser Vorgang ist sehr fehleranfällig, da eine vergessene Abhängigkeit zu schwer auffindbaren Fehlern innerhalb der Software führen kann. Es ist möglich, Makefiles zu erstellen, die diese Abhängigkeiten selbst generieren, aber es ist üblicher, separate Tools zu verwenden, um diese Abhängigkeiten zu ermitteln, wie z Auto machen des GNU-Projekts.

Ein weiteres Problem ist die Anpassung des Build-Prozesses für einen anderen Plattform. Compileroptionen, die für eine Plattform verwendet werden, können oft nicht für die andere Plattform verwendet werden. Dieses Problem wird gelöst, indem mehrere Build-Anweisungen angegeben werden, die von make angewendet werden können. Gängige Tools dafür sind autoconf und CMake.

Das Syntax verwendet in make umfasst auch die Verwendung des Tabulatorzeichens, eines der Zeichen, die als . verwendet werden Leerzeichen Wurde gesehen. Viele Texteditoren kann nicht klar unterscheiden Leerzeichen und Tabs, und der Abstand eines Tabs kann zwischen 2 und 8 Leerzeichen variieren. Aus diesem Grund wird die Syntax von make als Kritikpunkt angesehen. Einige Projekte wie Apache-Ameise haben versucht, dies mit einer besseren Syntax zu verbessern, mit unterschiedlichem Erfolg. Für Programmierer, die Generatoren verwenden, ist dieser Punkt weniger wichtig.

Mit dem Aufstieg der Integrierte Entwicklungsumgebung, insbesondere auf Nicht-Unix-Plattformen, müssen Programmierer oft keine Abhängigkeiten mehr manuell pflegen oder eine Liste der Dateien führen, die Teil eines Projekts sind. Diese Aufgabe wird häufig von der Umgebung automatisiert. Viele modernere Programmiersprachen verfügen über sprachabhängige Methoden zum Nachverfolgen von Abhängigkeiten, die von sprachspezifischen Tools effizient genutzt werden. Der Nachteil dieser Ansätze besteht darin, dass spezifische Bauanweisungen begrenzt oder schwer in den Bauprozess einzupassen sind.

Aufbau eines Makefiles

Ein Makefile besteht aus Textzeilen, die eine oder mehrere Dateien definieren und die Abhängigkeiten zwischen einer oder mehreren Dateien definieren. Ausgabedateien werden beispielsweise mit Quelldateien verknüpft und Quelldateien werden mit den Dateien verknüpft, die in diese Datei eingefügt werden, wie z Header-Dateien. Nachdem alle Abhängigkeiten definiert sind, werden einige Zeilen hinzugefügt, denen mit vorangestellt ist Tab eingerückter Text, der definiert, wie die Eingabedateien in die Ausgabedatei übersetzt werden. Dies geschieht nur, wenn eine der Eingabedateien neuer als die Ausgabedatei ist oder wenn die Ausgabedatei nicht existiert. Diese Zeilen sind mit "Skripte erstellen" und werden von der Schale um die Ausgabedatei zu generieren. Die Grundstruktur ist:[2]

# Das Rautezeichen wird für den Kommentar verwendet targetFile:dependencies Befehl 1 Befehl 2... Befehl n

Ein Makefile kann auch Variablen enthalten und andere Makefiles einfügen. Variablen in Makefiles können optional aus dem Befehlszeile als Argument des make-Programms. Es ermöglicht dem Benutzer, verschiedenes Verhalten innerhalb der Build-Skripte festzulegen, wie Programme aufgerufen werden und für viele andere Dinge. Die Variable "CC" wird beispielsweise häufig verwendet, um auf einen C-Compiler zu verweisen, und der Benutzer kann einen anderen Compiler angeben, der mit dieser Variablen verwendet werden soll.

Beispiel für eine Make-Datei

Unten ist ein einfaches Beispiel für ein Makefile, das ein Programm namens "helloworld.c" kompiliert und verwendet cc, ein C-Compiler[2]. Das PHONY-Target ist ein technischer Trick, um bestimmten Zielen mitzuteilen, dass sie keine Dateien generieren sollen, und wenn das Ziel bereits als Datei existiert, ignorieren Sie sie, wodurch die Ausgabe von einem bestimmten Ziel immer so erzwungen wird, als ob sie nicht existierte. Die $@ und $< sind zwei sogenannte automatische Variablen die auf das Build-Ziel und die Quelldateien verweisen. Es gibt mehrere andere automatische Variablen.

helloworld: helloworld.o cc -o $@ $< helloworld.o: helloworld.c cc -c -o $@ $< .PHONY: clean clean: rm -f helloworld helloworld.o

Siehe auch

  • Apache-Ameise: eine Alternative zu make und wird hauptsächlich in Java-Projekten verwendet.

Externe Links