Jak zdefiniować globalne funkcje powłoki w Makefile?

Chcę zdefiniować funkcję powłoki

#!/bin/sh

test ()
{
  do_some_complicated_tests $1 $2;
  if something; then
    build_thisway $1 $2;
  else
    build_otherway $1 $2;
  fi
}

w taki sposób, że mogę go użyć w każdej regule mojego pliku Makefile, na przykład:

foo: bar
  test foo baz

Aby było jasne, chcę, aby funkcja powłoki była częścią pliku Makefile. Jaki jest najbardziej elegancki sposób na to? Dodatkowe punkty, jeśli możesz to zrobić bez rekurencyjnego wywoływania.

Tło: Moim rzeczywistym problemem jest tomake -n produkuje bardzo długie i nieczytelne dane wyjściowe. Każda reguła używa prawie tej samej sekwencji nieczytelnych poleceń powłoki i istnieje wiele reguł. Powyższe rozwiązanie sprawiłoby, że wyjściemake -n bardziej użyteczny.

questionAnswers(7)

yourAnswerToTheQuestion