List all commands in a Makefile
It’s a pretty inscrutable, but Suvash Thapaliya has a snippet of code that will add a help command to any Makefile.
Just add a help target with this long awk string:
help:  ## Display this help
	@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n  make \033[36m<target>\033[0m\n"} /^[.a-zA-Z_-]+:.*?##/ { printf "  \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)An example Makefile for a TypeScript project that looks something like this (long help target omitted):
##@ Development
.PHONY: install typecheck
install: ## Install dependencies
  @pnpm install
typecheck: ## Check static types
  @pnpm tsc --noEmit
##@ Deployment
.PHONY: build
build: ## Build for production
  @rm -rf build
  @pnpm tscRunning make help will show this:
$ make help
Usage:
  make <target>
Development
  install          Install dependencies
  typecheck        Check static types
Deployment
  build            Build for productionThe snippet makes it so that ## after a target becomes the help text for that target, and ##@ before a bunch of targets turns that into a group. (In this example, ##@ Helpers would have gone before help.)
To display the help text when just typing make alone, add .DEFAULT_GOAL = help at the top of the Makefile.