Das Tool make wurde ursprünglich von Stuart I. Feldman entwickelt, um dem programmschaffenden Volke ein effektives Werkzeug zur Generierung von Programmen an die Hand zu geben. Dass dies sehr gut gelungen ist, belegt wohl die Tatsache, dass das ursprünglich unter und für Unix geschriebene make auf die meisten heute existierenden Plattformen portiert wurde. Sein Einsatzgebiet beschränkt sich aber schon lange nicht mehr ausschließlich auf die Programmierung.
Was ist make?
Die Standardsituation: Eine Programmiererin abeitet an einem beträchtlichen Haufen Quelldateien, die übersetzt und schließlich zu einem ausführbaren Programm zusammen gelinkt werden müssen. Jedes Mal, wenn eine Änderung an einer Datei vorgenommen wird, muss diese Datei neu übersetzt und dann das ganze Programm erneut gelinkt werden.
Dabei wird sehr schnell ein bedeutendes Problem sichtbar: Die Programmiererin muss sich jeweils alle Dateien merken, die sie modifiziert hat, und zweitens sollte sie auch alle Dateien im Kopf haben, die von diesen modifizierten Dateien abhängig sind.
Genau hier setzt make an. Das make-Tool kompiliert alle modifizierten Dateien sowie alle, die von diesen abhängig sind, und linkt dann alles fein säuberlich zum ausführbaren "Executable" zusammen. Um dieses Wunder zu vollbringen, folgt make haargenau den Anweisungen, die in einer Datei mit dem Namen Makefile festgehalten sind. Praktisch alle Programme, deren Quellcode veröffentlicht ist, und die z.B. auf dem heimischen Rechner übersetzt werden können, werden mittels Makefiles organisiert. Oft hat man dann nicht mehr zu tun, als den Befehl make einzutippen, einen Kaffee trinken zu gehen und dann das frisch übersetzte Programm zu starten.
Wie funktioniert make?
Das Prinzip, nach dem make arbeitet, ist recht einfach. Um die Dateien zu bestimmen, welche neu zu übersetzen sind, schaut make nach, ob schon eine Version des zu erzeugenden Programms existiert. Wenn nicht, werden alle Dateien nach den Anweisungen im Makefile kompiliert. Existiert schon eine alte Programmversion, dann nimmt sich make den "Timestamp" ("Zeitstempel") dieser Version her und vergleicht ihn mit den Timestamps aller Dateien, die in der Abhängigkeitszeile angegeben sind. Ist der Timestamp einer solchen Datei aktueller als jener der alten Programmversion, dann werden diese Datei und alle von ihr abhängigen Dateien neu kompiliert.



