The more projects you work on, the more streamlined your tooling gets. Hopefully. Various services using different languages have different tooling requirements, of course. A sweet Makefile can be the entry to a unified tooling interface.
As long as I can run make build deploy
in a project, I’m happy. Do you a have more complex interface to deploy a dev
environment? Rethink your tooling and remove obstacles for people who want to work on your project or contribute to your code.
Hide Commands
You might have noticed, make
will list the invoked commands in a target per default. You can avoid this, and have a more slick output using @
in front of your commands:
greet:
@ echo "Hi!"
# Without @
$ > make greet
echo "Hi!"
Hi!
# With @
$ > make greet
Hi!
Wildcard Targets
You can always access environment variables in a Makefile
, but for composition, you may want to use wildcard targets in make
files.
greet-%:
@ echo Hi $*!
# Say Hi to Frank
$ > make greet-Frank
Hi Frank!
Foreach and Lists
Together with wildcard targets, using lists and foreach can be a powerful addition to your make
toolbox:
NAMES := Anne Frank Paul
greet-%:
@ echo Hi $*!
greet:
@ make $(foreach NAME,$(NAMES),greet-$(NAME))
# Say Hi to everybody!
$ > make greet
Hi Anne!
Hi Frank!
Hi Paul!