Osobiście bym tego nie robił w makefile'u bezpośrednio, prędzej w osobnym skrypcie bashowym lub Pythonie.
(Nie wiem do końca jaki masz powód ku otwieraniu klientów w osobnych terminalach. To, że serwer jest blokowany czekając na stdin, też brzmi bardzo dziwnie.)
Zamiast w osobnych terminalach, można po prostu uruchamiać kolejne procesy w tle. Potem można serwerowi przez stdin przekazać wejście.
W Pythonie to by wyglądało na przykład tak:
from subprocess import Popen, PIPE
server = Popen(['./server'], stdin=PIPE, text=True)
Popen(['./client'])
Popen(['./client'])
Popen(['./client'])
print('arg', file=server.stdin)
Trochę verbose, ale bardzo elastyczne.
Można też coś podobnego zrobić w bashu, na przykład otwierając serwer w screenie i przekazując tekst do tego screena.