I love Makefiles, they are my prefered way to manage builds. Not just for C or C++, I also use it for Golang for example. To me, it is the best way to manage build commands in a single place.
As I love CLI tools in general, and working with them, the --help
flag is often a great help, but Make does not offer this out of the box, and navigating complex Makefiles can be challenging.
I can’t remember where or when, but a few years ago, I found a snippet somewhere of a Makefile command that adds a coloured text output of all Makefile commands. Using it is as simple as making the following your first Makefile command:
.PHONY: help
help: ## Shows all commands
@echo 'All Makefile commands:'
@grep -h -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
After adding this, you can simply add comments after your other Makefile commands with two #
characters, like this:
.PHONY: dev
dev: CFLAGS = $(CFLAGS_DEV) ## Development build for /src and /example
dev: clean $(LIB) $(EXAMPLE)
This will now be automatically generate help output when running make help
, or when you have defined this as your first Make command, with simply make