Makefile erstellen
Makefile erstellen für C, C++, Go, Python, Node.js oder Docker: mit make Targets für Build, Test und Clean, .PHONY, Hilfe-Target und echten Tabs.
Alles läuft in Ihrem Browser. Eingaben verlassen Ihr Gerät nicht.
Makefile mit den üblichen Targets
Mit dem Generator können Sie ein Makefile erstellen, das die üblichen Aufgaben eines Projekts unter einheitlichen Namen bündelt: make build, make test, make lint, make run und make clean. Der Makefile Generator bietet Vorlagen für C, C++, Go, Python und Node.js sowie Targets für Docker. Jedes Makefile Beispiel ist so aufgebaut, dass es ohne Anpassung in einem Projekt mit der üblichen Ordnerstruktur funktioniert.
Make-Targets bestehen aus Ziel, Voraussetzungen und Rezept. Make baut ein Ziel nur neu, wenn eine Voraussetzung neuer ist; deshalb übersetzt die C-Vorlage nur geänderte Dateien. Die Optionen -MMD -MP erzeugen dabei Abhängigkeitsdateien, damit auch Änderungen an Header-Dateien einen Neubau auslösen. Targets wie test oder clean erzeugen dagegen keine gleichnamige Datei; sie stehen unter .PHONY, damit Make sie immer ausführt, selbst wenn zufällig eine Datei namens test existiert.
Die häufigste Fehlerquelle sind Leerzeichen statt Tabs: Jede Rezeptzeile muss mit einem Tabulator beginnen, sonst meldet Make „missing separator“. Der Generator schreibt echte Tabs, und auch Kopieren und Herunterladen erhalten sie. Achten Sie darauf, dass Ihr Editor sie beim Speichern nicht in Leerzeichen umwandelt; eine passende Regel für Makefiles erzeugt der EditorConfig-Generator. Das Hilfe-Target liest die Kommentare hinter ## aus und zeigt alle dokumentierten Targets mit Beschreibung an.
Anleitung: Makefile erstellen in 4 Schritten
- Unter „Vorlage“ die Sprache wählen: C, C++, Go, Python, Node.js oder nur Docker.
- „Projektname“, „Quellverzeichnis“ und die Compiler- oder Linker-Optionen anpassen.
- Wählen, ob ein Hilfe-Target und Docker-Targets ergänzt werden.
- Mit „Herunterladen“ eine Datei
Makefilespeichern oder kopieren; die Tabs bleiben erhalten. Danachmake helpausführen.
Typische Anwendungsfälle
- Einheitliche Befehle im Team:
make testodermake lintfunktionieren in jedem Projekt gleich, egal welche Sprache dahintersteht. - Kleine C- oder C++-Projekte ohne CMake bauen, mit automatischen Abhängigkeiten zu Header-Dateien.
- CI-Pipelines vereinfachen: Der Workflow ruft nur
make buildauf, die Details stehen im Makefile.
Häufige Fragen
Warum meldet make „missing separator“?
Fast immer beginnt eine Rezeptzeile mit Leerzeichen statt mit einem Tabulator. Make verlangt Tabs. Prüfen Sie die Zeile im Editor mit sichtbaren Leerzeichen oder laden Sie die Datei hier herunter.
Was bedeutet ?= bei Variablen?
CC ?= cc setzt den Wert nur, wenn die Variable noch nicht gesetzt ist. So können Sie ihn beim Aufruf überschreiben, etwa mit make CC=clang oder über eine Umgebungsvariable.
Was ist der Unterschied zwischen = und :=?
Mit = wird der Wert bei jeder Verwendung neu ausgewertet, mit := einmal bei der Zuweisung. Für Listen aus $(wildcard …) ist := üblich, weil es schneller und vorhersehbar ist.
Wie führe ich Targets parallel aus?
Mit make -j4 baut Make bis zu vier unabhängige Ziele gleichzeitig. Die C- und C++-Vorlagen sind dafür geeignet, weil jede Objektdatei ein eigenes Ziel ist.
Welches Target läuft bei einem einfachen make?
Das erste normale Ziel in der Datei, in den Vorlagen all. Sie können es auch ausdrücklich mit .DEFAULT_GOAL := build festlegen.
Funktioniert das Makefile auch unter Windows?
Mit GNU Make in WSL, Git Bash oder MSYS2 ja. Die Rezepte verwenden Unix-Befehle wie rm -rf und mkdir -p; in der Windows-Eingabeaufforderung funktionieren diese nicht.
Was bedeuten $@, $< und $^?
Automatische Variablen: $@ ist das Ziel, $< die erste Voraussetzung und $^ alle Voraussetzungen. In der Regel $(BUILD)/%.o: $(SRC_DIR)/%.c ist $< also die jeweilige .c-Datei.
Das könnte auch helfen
Cron-Ausdruck erklären
Crontab-Zeilen mit 5 oder 6 Feldern auf Deutsch erklärt, mit den nächsten 10 Ausführungen.
ÖffnenCron-Generator
Zeitplan im Formular wählen und die fertige Crontab-Zeile kopieren.
ÖffnenUnix-Zeitstempel umrechnen
Timestamp in Datum und zurück, Sekunden und Millisekunden erkannt, UTC und Berlin.
ÖffnenUUID-Generator
UUID v4 und v7 erzeugen, bis zu 1.000 auf einmal, und vorhandene UUIDs prüfen.
ÖffnenULID-Generator
Sortierbare IDs in Crockford Base32 erzeugen, dekodieren und in UUID umwandeln.
ÖffnenTexte vergleichen (Diff)
Unterschiede zwischen zwei Texten zeilen-, wort- oder zeichenweise finden.
Öffnen