As projects grow the Makefile becomes pretty much a big bash script, but with a specific syntax that I always struggle with.
Run: Task runner that helps you easily manage and invoke small scripts and wrappers
https://github.com/TekWizely/run
Defining commands feels like make, but comes with a bunch of extras targeted at the needs of a task-runner.
I hope you'll check it out!
I suggest to add a complete example of common use cases like running the unit tests, building targets while setting the correct options depending on the host (linux vs windows vs macos).