Gumulka

ein blog

Dec 18, 2019

Help Target im Makefile

Translations: en

Ich habe vor einiger Zeit angefangen Makefiles wieder verstärkt zu benutzen und lerne dabei ein paar Sachen. Man schreibt diese ja immer erst mal für sich selbst, aber teilweise auch im Team.

Gerade sitze ich an einem Projekt, wo genau das nötig ist und bin über einen Blogeintrag gestoßen, den ich äußerst hilfreich fand, aber der ein paar kleine Verbesserungen benötigt.

Sie schlagen dort vor ein Target help zu definieren:

.PHONY: help

help:
    @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

Das Ganze hat für mich nur ein paar Nachteile. Die Variable MAKEFILE_LIST enhält eine Liste von allen Makefiles und grep gibt den Dateinamen aus, wenn mehrere Dateien übergeben werden. Es fehlt hier also der -h Parameter.

Auch fände ich es schön, wenn help an sich schon dokumentiert wäre.

Und wenn es das bevorzugte Target ist, egal wo es steht, da ich das "sort" doch häufiger weg lasse.

Des weiteren arbeite ich mit Dateien, welche "." und Zahlen im Dateinamen haben können.

Meine help Target sieht also folgendermaßen aus:

# Make the Makefile self-documenting with this targets.
# Targets having a comment with double # are printed out.
.PHONY: help
help: ## Print this help message
    @grep -h -E '^[0-9a-zA-Z._-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
# Make this the default target
.DEFAULT_GOAL := help

Wenn mein Team jetzt also jetzt make ohne Parameter aufruft bekommt es eine nützliche Nachricht mit allen Parametern, welche dokumentiert sind. Und Dokumentieren tut man ja bekanntlich alles. ;-)