Viele Projekte umfassen eine Vielzahl von Quelldateien. Im Prinzip können Sie jede dieser Dateien manuell kompilieren - Sie verwenden einen Compiler, um diese Quelldatei in eine (temporäre) Objektdatei mit Maschinencode zu kompilieren.
In der Praxis ist es viel zu mühsam, jede Quelldatei einzeln manuell zu kompilieren, und noch mühsamer ist es, sich manuell zu merken, welche Quelldateien neu kompiliert werden müssen. Daher erstellen wir das gesamte Projekt auf einmal, indem wir ein automatisiertes Build-Programm - normalerweise "make" genannt - ausführen. Dieses Programm geht eine Liste von Quelldateien durch, die oft in einer weiteren "Quell"-Datei namens "makefile" gespeichert ist, und ruft den Compiler für jede einzelne Datei auf - viele Versionen von "make" sind intelligent genug, um nur die Dateien neu zu kompilieren, die sich geändert haben und daher neu kompiliert werden müssen.
Während das Kompilieren wohl der wichtigste Teil des Build-Prozesses ist, werden bei einem "Build" oft viele andere Programme nach dem Compiler ausgeführt. Gelegentlich verbringt ein vollständiger Build mehr Zeit mit der Ausführung dieser anderen Programme als mit der Ausführung des Compilers.
Viele Leute finden es zum Beispiel praktisch, wenn eine einzige Schaltfläche nicht nur den gesamten Quellcode in die neueste Version kompiliert, sondern auch eine Reihe von Standardtests ausführt ( C2: Testen mit einer Taste ). Daher listet das Makefile auch alle Befehle auf, die für die Ausführung dieser Tests benötigt werden und die Teil des Build-Prozesses werden.