I made my own decision using a short Perl script that formats help like other GNU tools:
SCRIPT_VERSION=v1.0 SCRIPT_AUTHOR=John Doe all: ##@Build Build all the project clean: ##@Cleaning Remove all intermediate objects mrproper: clean ##@Cleaning Remove all output and interemediate objects HELP_FUN = \ %help; while(<>){ push@ {$$help{$$2//'options'}},[$$1,$$3] \ if/^([\w-_]+)\s*:.*\#\#(?:@(\w+))?\s(.*)$$/}; \ print"$$_:\n", map" $$_->[0]".(" "x(20-length($$_->[0])))."$$_->[1]\n",\ @{$$help{$$_}},"\n" for keys %help; \ help: ##@Miscellaneous Show this help @echo -e "Usage: make [target] ...\n" @perl -e '$(HELP_FUN)' $(MAKEFILE_LIST) @echo -e "Written by $(SCRIPT_AUTHOR), version $(SCRIPT_VERSION)" @echo -e "Please report any bug or error to the author."
What gives this:
$ make help Usage: make [target] ... Miscellaneous: help Show this help Build: all Build all the project Cleaning: clean Remove all intermediate objects mrproper Remove all output and interemediate objects Written by John Doe, version v1.0 Please report any bug or error to the author.
source share