Когда mklement0 указывает на , в GNU-make отсутствует функция для перечисления всех целей Makefile, и его ответ и другие приводят способы сделать это.
Однако в оригинальном посте также упоминается rake , чей переключатель tasks делает что-то немного другое, чем просто перечисление всех задач в rakefile. Rake предоставит вам только список задач, с которыми связаны описания. Задачи без описания не будут перечислены . Это дает автору возможность как предоставлять настраиваемые описания справки, так и опускать справку для определенных целей.
Если вы хотите эмулировать поведение рейка, где вы предоставляете описания для каждой цели , для этого есть простой метод: вставлять описания в комментарии для каждой цели, которую вы хотите перечислить.
Вы можете поместить описание рядом с целью или, как я часто это делаю, рядом со спецификацией PHONY над целью, например:
.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
Который даст
$ make help
target1 Target 1 help text
target2 Target 2 help text
...
help Generate list of targets with descriptions
Вы также можете найти пример короткого кода в этой сущности и здесь тоже.
Опять же, это не решает проблему перечисления всех целей в Makefile. Например, если у вас есть большой Makefile, который, возможно, был сгенерирован или кто-то другой написал, и вы хотите быстрый способ перечислить цели, не копаясь в них, это не поможет.
Однако, если вы пишете Makefile и хотите получить способ создания справочного текста согласованным, самодокументированным способом, этот метод может быть полезен.