Makefiles
Den Build automatisieren
Makefiles ist eine kostenlose C Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum Makefiles
Das manuelle Eingeben von gcc-Befehlen wird schnell unübersichtlich. make liest ein Makefile, das beschreibt, wie Ihr Projekt erstellt wird, und führt nur die erforderlichen Befehle aus.
Die wichtigste Funktion: Eine Datei wird nur dann neu erstellt, wenn ihre Eingaben neuer sind als ihre Ausgabe. Dadurch wird viel Kompilierzeit eingespart.
Aufbau einer Regel
Eine Regel besteht aus drei Teilen: einem Ziel, seinen Voraussetzungen und einem Rezept.
Die Rezeptzeile MUSS mit einem echten TAB-Zeichen beginnen, nicht mit Leerzeichen. Das ist der häufigste Fehler in Makefiles.
target: prerequisite1 prerequisite2
<TAB>command to build targetEin erstes Makefile
Damit wird app aus zwei Quelldateien erstellt. Wenn Sie make ohne Argument ausführen, wird das erste Ziel erstellt.
Wenn sich seit dem letzten Build keine der beiden Quelldateien geändert hat, gibt make 'up to date' aus und tut nichts.
app: main.c math_utils.c
gcc main.c math_utils.c -o appRegeln für die getrennte Kompilierung
Wenn jedes Objekt separat erstellt wird, führt eine Änderung in einer Datei nur dazu, dass diese Datei neu kompiliert wird.
make folgt dem Abhängigkeitsgraphen: Ändern Sie main.c, werden nur main.o und anschließend das endgültige Linken erneut ausgeführt.
app: main.o math_utils.o
gcc main.o math_utils.o -o app
main.o: main.c math_utils.h
gcc -c main.c
math_utils.o: math_utils.c math_utils.h
gcc -c math_utils.cVariablen
Variablen vermeiden Wiederholungen. Definieren Sie sie am Anfang und erweitern Sie sie mit $(NAME).
Wenn Sie jetzt den Compiler oder die Compiler-Optionen ändern, müssen Sie das nur an einer Stelle tun.
CC = gcc
CFLAGS = -Wall -Wextra -g
app: main.o math_utils.o
$(CC) main.o math_utils.o -o appAutomatische Variablen
make stellt innerhalb von Rezepten Kurzschreibweisen bereit:
$@— der Name des Ziels$^— alle Voraussetzungen$<— die erste Voraussetzung
Damit bleiben Rezepte kurz und korrekt.
app: main.o math_utils.o
$(CC) $^ -o $@
main.o: main.c
$(CC) $(CFLAGS) -c $< -o $@Musterregeln
Eine Musterregel kompiliert jede .c-Datei in ihre entsprechende .o-Datei. Dadurch müssen Sie keine eigene Regel für jede Datei schreiben.
% steht für einen beliebigen Stamm; zusammen mit $< und $@ ist die Regel vollständig allgemein verwendbar.
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@Phony-Ziele
Ziele wie clean erzeugen keine Datei mit diesem Namen. Deklarieren Sie sie als .PHONY, damit make sie immer ausführt, selbst wenn eine Datei namens 'clean' existiert.
clean entfernt Build-Artefakte, um einen vollständigen Neubuild zu erzwingen.
.PHONY: clean
clean:
rm -f *.o appEin vollständiges Makefile
Alles zusammen: Variablen, eine Musterregel, eine Linkregel und ein Phony-Ziel zum Bereinigen.
Das lässt sich auf viele Dateien erweitern, ohne einzelne Dateien anpassen zu müssen.
CC = gcc
CFLAGS = -Wall -Wextra -g
OBJS = main.o math_utils.o
app: $(OBJS)
$(CC) $^ -o $@
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
.PHONY: clean
clean:
rm -f $(OBJS) appWie make entscheidet
make vergleicht Zeitstempel. Ein Ziel wird neu erstellt, wenn eine Voraussetzung eine neuere Änderungszeit besitzt oder wenn das Ziel nicht existiert.
Darum ist es wichtig, Header-Abhängigkeiten aufzulisten: Wenn Sie einen Header bearbeiten, werden alle davon abhängigen Objektdateien korrekt neu erstellt.
Mehrere Ziele und Standardziele
Das erste Ziel in einem Makefile ist das Standardziel und wird ausgeführt, wenn Sie einfach make eingeben. Üblicherweise heißt es all.
Sie können auch ein bestimmtes Ziel über seinen Namen erstellen, etwa mit make clean oder make test. Dadurch bietet ein Makefile mehrere nützliche Einstiegspunkte.
.PHONY: all
all: app
test: app
./app --selftestKurze Überprüfung
Analysieren Sie einen klassischen Makefile-Fehler.
Zusammenfassung
Sie können Builds jetzt mit make automatisieren:
- Regeln bestehen aus Ziel, Voraussetzungen und einem durch TAB eingerückten Rezept
- Variablen und automatische Variablen (
$@ $^ $<) vermeiden Wiederholungen - Musterregeln (
%.o: %.c) behandeln jede Datei auf allgemeine Weise .PHONYkennzeichnet Ziele wieclean, die keine Dateien sind- make erstellt anhand der Zeitstempel nur veraltete Teile neu
Als Nächstes: statische und gemeinsam genutzte Bibliotheken erstellen.
Häufig gestellte Fragen
Ist die Lektion „Makefiles“ kostenlos?
Ja — der vollständige Text von „Makefiles“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Makefiles“?
Den Build automatisieren Du übst C Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C Academy zu starten?
Keine Vorkenntnisse erforderlich. C Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Makefiles“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C Academy-Lektion Code schreiben und ausführen?
Ja. Jede C Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.