Built-in help in a Makefile
It looks pretty good to me, but I see a few minor things that might be improved.

Specify which perl to run

I'd recommend not leaving it to chance as to which instance of perl is run.  Instead, for both safety and consistency, it might be better to do this:

PERL=/usr/bin/perl
##...
@$(PERL) -e '$(HELP_FUN)' $(MAKEFILE_LIST)


Allow multiword category tags

With a slight change in your regex, multiword categories could be supported. If the second line is changed to this:

if/^(\w+)\s*:.*\#\#(?:@([^@]*)@)?\s(.*)$$/}; \


It will support multiword categories, delimited with @, 

nothing:         ##@Odds &amp; ends@ Do nothing, but gracefully 


Sort the keys for printing

On my machine, I get a different ordering each time I run make help which is a little confusing.  To fix that, sort the keys, rendering the last line:

@{$$help{$$_}},"\n" for sort keys %help 


Note that you shouldn't have a line continuation there, and you don't need the trailing semicolon (although you may prefer one for style reasons).

Omit declaration of hash

Because %help is unambiguously used, you don't need to predeclare it.  It will automatically be created as an empty hash, so the first line can become:

while(&lt;&gt;){push@{$$help{$$2//'options'}},[$$1,$$3] \