If you’re feeling mischievous, Make has divers ‘secret’ vars & targets for you. For instance, you don’t have to ‘struggle’ w/ the ancient bash, for it’s possible to program recipes in any language that supports evaluations straight from the command line.
In addition you can have different shell for each rule with the rule specific macros if you do desire:
.ONESHELL:
.SILENT:
.PHONY: rule1
rule1: SHELL := /usr/bin/python3
rule1:
foo=bar
print("python: {}".format(foo))