0Pricing
C Academy · Lektion

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 target

Ein 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 app

Regeln 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.c

Variablen

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 app

Automatische 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 app

Ein 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) app

Wie 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 --selftest

Kurze Ü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
  • .PHONY kennzeichnet Ziele wie clean, 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.

Alle Lektionen in diesem Kurs

  1. Bedingte Kompilierung
  2. Projekte mit mehreren Dateien
  3. Makefiles
  4. Statische und Shared Libraries
← Zurück zu C Academy