turn GNU Make into a better task runner with one file
Go to file
Daylin Morgan 1fbf19d612 release: v23.1.2 2023-01-29 21:51:43 -06:00
.githooks build: add versioned hook 2022-09-07 15:53:13 -05:00
.github/workflows CI: docs should be built for versioned releases 2023-01-19 14:29:20 -06:00
assets docs: update svg 2023-01-20 11:28:43 -06:00
docs release: v23.1.2 2023-01-29 21:51:43 -06:00
src docs: switch to vhs and add phonify example 2023-01-29 21:51:05 -06:00
.gitignore docs: switch to vhs and add phonify example 2023-01-29 21:51:05 -06:00
.task.cfg.mk build: make messages not ugly on first run 2023-01-25 12:24:22 -06:00
LICENSE chore: add LICENSE 2022-09-05 23:56:24 -05:00
Makefile build: conda -> venv 2023-01-29 14:29:07 -06:00
README.md release: v23.1.2 2023-01-29 21:51:43 -06:00
generate.py feat: add experimental support for phonify 2023-01-21 00:38:44 -06:00
mkdocs.yml docs: switch to vhs and add phonify example 2023-01-29 21:51:05 -06:00
requirements-docs.txt docs: use peaceiris action 2022-09-25 17:09:35 -05:00
setup.cfg add src 2022-09-05 12:23:17 -05:00
task.mk release: v23.1.2 2023-01-29 21:51:43 -06:00




the task runner for GNU Make you've been missing


GNU make is an excellent build tool and the task runner we love to hate, but can't escape. So let's improve the UX to make it the best task runner it can be.

Task.mk, is a standalone Makefile you can deploy alongside your own to add some QOL improvements for your users and fellow maintainers.

Current Features:

  • ANSI escape code support (including NO_COLOR)
  • formatted help output
  • custom print function
  • confirmation prompt
  • goal phonifier (disabled by default)

Depends on GNU Make, obviously and Python >=3.7, and bash (or zsh).

Wait python?!?!, I'm not pip installing some package just to parse my makefile. I agree, all you need is one file .task.mk. You can automagically include it with just two additional lines to your Makefile (and probably one to your .gitignore) and you're good to go.


One line setup to download .task.mk and add appropriate includes to your Makefile.

bash <(curl -fsSL gh.dayl.in/task.mk/init) # or w/ TASKMK_VERSION=

You can include this as an optional dependency on your project by adding the below lines to the end of your Makefile. If someone tries to invoke make help it will download .task.mk for them.

-include .task.mk
$(if $(filter help,$(MAKECMDGOALS)),$(if $(wildcard .task.mk),,.task.mk: ; curl -fsSL https://raw.githubusercontent.com/daylinmorgan/task.mk/v23.1.2/task.mk -o .task.mk))

If you plan to use any features besides the help prompt you may want to instead commit .task.mk to version control or drop the $(MAKECMDGOALS) check so it's always downloaded once make is invoked.

-include .task.mk
$(if $(wildcard .task.mk),,.task.mk: ; curl -fsSL https://raw.githubusercontent.com/daylinmorgan/task.mk/v23.1.2/task.mk -o .task.mk)

For more info see the documentation.