Come sottolinea mklement0 , GNU-make manca una funzionalità per elencare tutti i target di Makefile, e la sua risposta e altri forniscono modi per farlo.
Tuttavia, il post originale menziona anche rake , il cui cambio di attività fa qualcosa di leggermente diverso rispetto al semplice elenco di tutte le attività nel rakefile. Rake ti fornirà solo un elenco di attività a cui sono associate descrizioni. Le attività senza descrizioni non verranno elencate . Ciò dà all'autore la possibilità sia di fornire descrizioni di aiuto personalizzate sia di omettere l'aiuto per determinati target.
Se vuoi emulare il comportamento di rake, dove fornisci descrizioni per ciascun obiettivo , esiste una tecnica semplice per farlo: incorporare le descrizioni nei commenti per ciascun obiettivo che si desidera elencare.
Puoi mettere la descrizione vicino al bersaglio o, come faccio spesso, accanto a una specifica PHONY sopra il bersaglio, in questo modo:
.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
Che produrrà
$ make help
target1 Target 1 help text
target2 Target 2 help text
...
help Generate list of targets with descriptions
Puoi anche trovare un esempio di codice breve in questa sintesi e qui anche .
Ancora una volta, questo non risolve il problema di elencare tutti gli obiettivi in un Makefile. Ad esempio, se hai un grande Makefile che è stato forse generato o che qualcun altro ha scritto e vuoi un modo rapido per elencare i suoi obiettivi senza scavare attraverso di esso, questo non sarà di aiuto.
Tuttavia, se stai scrivendo un Makefile e desideri un modo per generare un testo di aiuto in modo coerente e autocompattante, questa tecnica può essere utile.
alias makefile-targets='grep "^[^#[:space:]].*:" Makefile'
Molto spesso ho solo bisogno di esaminare il makefile corrente e il completamento bash si espande il mio alias.