Comme remarquer mklement0 , une fonction pour répertorier toutes les cibles Makefile manque dans GNU-make, et sa réponse et d'autres fournissent des moyens de le faire.
Cependant, le message d'origine mentionne également rake , dont le changement de tâches fait quelque chose de légèrement différent de simplement lister toutes les tâches dans le rakefile. Rake ne vous donnera qu'une liste de tâches qui ont des descriptions associées. Les tâches sans description ne seront pas répertoriées . Cela permet à l'auteur de fournir à la fois des descriptions d'aide personnalisées et d'omettre l'aide pour certaines cibles.
Si vous souhaitez imiter le comportement de rake, où vous fournissez descriptions pour chaque cible , il existe une technique simple pour ce faire: incorporer des descriptions dans les commentaires pour chaque cible que vous souhaitez répertorier.
Vous pouvez soit mettre la description à côté de la cible ou, comme je le fais souvent, à côté d'une spécification PHONY au-dessus de la cible, comme ceci:
.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
Qui donnera
$ make help
target1 Target 1 help text
target2 Target 2 help text
...
help Generate list of targets with descriptions
Vous pouvez également trouver un exemple de code court dans cet essentiel et ici aussi.
Encore une fois, cela ne résout pas le problème de la liste de toutes les cibles dans un Makefile. Par exemple, si vous avez un gros Makefile qui a peut-être été généré ou que quelqu'un d'autre a écrit, et que vous voulez un moyen rapide de lister ses cibles sans le fouiller, cela n'aidera pas.
Toutefois, si vous écrivez un Makefile et que vous souhaitez générer un texte d'aide de manière cohérente et auto-documentée, cette technique peut être utile.
alias makefile-targets='grep "^[^#[:space:]].*:" Makefile'
plus souvent, j'ai juste besoin d'examiner le makefile actuel, et l'achèvement de bash se développe mon alias.