Wie mklement0 hervorhebt , fehlt in GNU-make eine Funktion zum Auflisten aller Makefile-Ziele, und seine und andere Antworten bieten Möglichkeiten dazu.
Der ursprüngliche Beitrag erwähnt jedoch auch Rake , dessen Aufgabenwechsel etwas anderes bewirkt als nur die Auflistung aller Aufgaben in der Rake-Datei. Rake gibt Ihnen nur eine Liste von Aufgaben, denen Beschreibungen zugeordnet sind. Aufgaben ohne Beschreibung werden nicht aufgelistet . Dies gibt dem Autor die Möglichkeit, sowohl benutzerdefinierte Hilfebeschreibungen bereitzustellen als auch Hilfe für bestimmte Ziele wegzulassen.
Wenn Sie das Verhalten von Rake emulieren möchten, indem Sie Beschreibungen für jedes Ziel bereitstellen , gibt es eine einfache Technik, um dies zu tun: Betten Sie Beschreibungen in Kommentare für jedes Ziel ein, das aufgelistet werden soll.
Sie können die Beschreibung entweder neben das Ziel oder, wie so oft, neben eine PHONY-Spezifikation über dem Ziel setzen:
.PHONY: target1 # Target 1 help text
target1: deps
[... target 1 build commands]
.PHONY: target2 # Target 2 help text
target2:
[... target 2 build commands]
...
.PHONY: help # Generate list of targets with descriptions
help:
@grep '^.PHONY: .* #' Makefile | sed 's/\.PHONY: \(.*\) # \(.*\)/\1 \2/' | expand -t20
Welches wird ergeben
$ make help
target1 Target 1 help text
target2 Target 2 help text
...
help Generate list of targets with descriptions
Ein kurzes Codebeispiel finden Sie auch in dieser Übersicht und auch hier .
Dies löst wiederum nicht das Problem, alle Ziele in einem Makefile aufzulisten. Wenn Sie beispielsweise ein großes Makefile haben, das möglicherweise generiert wurde oder von jemand anderem geschrieben wurde, und eine schnelle Möglichkeit zum Auflisten der Ziele wünschen, ohne es zu durchsuchen, hilft dies nicht.
Wenn Sie jedoch ein Makefile schreiben und eine Möglichkeit suchen, Hilfetext auf konsistente, selbstdokumentierende Weise zu generieren, kann diese Technik hilfreich sein.
alias makefile-targets='grep "^[^#[:space:]].*:" Makefile'
Meistens muss ich nur das aktuelle Makefile untersuchen, und die Bash-Vervollständigung wird erweitert mein Alias.