反論がないからもう一度書くね

タスクランナーとして使う場合、依存しているファイルがないので
Makefileで使える部分は

task:

↑これだけなんだよ

そしてtaskの中身は、コマンドを羅列するか
シェルスクリプトを"エスケープして"埋め込むことだけ

task: であれば
task() { と書いても数文字増える程度で大差なく、

一番重要なタスクの処理は、

task() {
 ここにコマンドやシェルスクリプトを
 エスケープせずにそのまま書けるというメリットが有る
}

もちろん task 関数を書いただけじゃ呼び出せないから
それをシェルスクリプトでは呼び出すコードが必要

あー、それがオレオレロジックなんだーって言うかもしれないが
それは>>287に書いた通り

# お前に必要なmakeコマンドの実装
for target; do "$target"; done

たったこれだけ