Voici une description détaillée de ce que fait cette ligne :
@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sed -n 's/^\(.*\):.*##\s*\(.*\)/\1:\2/p' | awk -F: '{ gsub(/^[ \t]+/, "", $$2); printf " $(GREEN)%-10s$(NC) %s\n", $$1, $$2 }'
-
fgrep -h "##" $(MAKEFILE_LIST)
:fgrep
: Recherche des chaînes fixes (plus rapide quegrep
pour des chaînes simples).-h
: N'affiche pas les noms des fichiers où les chaînes sont trouvées (utile lors de la recherche dans plusieurs fichiers)."##"
: La chaîne à rechercher.$(MAKEFILE_LIST)
: Une variable interne demake
qui contient le nom duMakefile
en cours d'exécution (et tout autre fichier inclus).
-
fgrep -v fgrep
: Filtre pour éliminer les lignes contenant le motfgrep
pour éviter les faux positifs. Utile surtout si cette ligne est dans le Makefile et que vous recherchez les commentaires "##". -
sed -e 's/\\$$//'
: Supprime les fins de ligne d'échappement (comme\\
) qui pourraient être présentes. -
sed -n 's/^\(.*\):.*##\s*\(.*\)/\1:\2/p'
: Capture les règles et leurs descriptions :^\(.*\):
: Capture tout avant le:
..*##\s*
: Capture et ignore tout entre le:
et le##
ainsi que les espaces après le##
.\1:\2
: Récupère et reformate les règles et leurs descriptions pour avoirrule:description
.
-
awk -F: '{ gsub(/^[ \t]+/, "", $$2); printf " $(GREEN)%-10s$(NC) %s\n", $$1, $$2 }'
: Formate et colore la sortie :-F:
: Définit le caractère:
comme séparateur de champs pourawk
.gsub(/^[ \t]+/, "", $$2)
: Supprime les espaces au début des descriptions.printf " $(GREEN)%-10s$(NC) %s\n", $$1, $$2
: Affiche les règles en vert (ou une autre couleur de votre choix) et les aligne, puis affiche la description.