Como mklement0 aponta , um recurso para listar todos os destinos Makefile está faltando no GNU-make, e sua resposta e outras fornecem maneiras de fazer isso.
No entanto, a postagem original também menciona rake , cujas tarefas mudam algo ligeiramente diferente do que apenas listar todas as tarefas no arquivo rake. O Rake fornecerá apenas uma lista de tarefas que têm descrições associadas. Tarefas sem descrições não serão listadas . Isso permite ao autor fornecer descrições personalizadas da ajuda e também omitir a ajuda para determinados destinos.
Se você deseja imitar o comportamento do rake, onde fornece descrições para cada destino , existe uma técnica simples para fazer isso: incorpore descrições nos comentários para cada destino que você deseja listar.
Você pode colocar a descrição ao lado do destino ou, como costumo fazer, ao lado de uma especificação PHONY acima do destino, assim:
.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
Qual trará
$ make help
target1 Target 1 help text
target2 Target 2 help text
...
help Generate list of targets with descriptions
Você também pode encontrar um exemplo de código curto nesta lista e aqui também.
Novamente, isso não resolve o problema de listar todos os destinos em um Makefile. Por exemplo, se você tem um grande Makefile que talvez tenha sido gerado ou que alguém escreveu, e você deseja uma maneira rápida de listar seus destinos sem procurar, isso não ajudará.
No entanto, se você estiver escrevendo um Makefile e desejar gerar uma forma de texto de ajuda de maneira consistente e auto-documentável, essa técnica poderá ser útil.
alias makefile-targets='grep "^[^#[:space:]].*:" Makefile'
Na maioria das vezes, só preciso examinar o makefile atual e a conclusão do bash se expande meu apelido.