Заставьте вашу первую цель (по умолчанию) зависеть от целей clt
и svr
.
all: svr clt
svr: ...
clt: ...
Вам также понадобится, чтобы цель clt
и svr
создала подкаталоги.
Другой, возможно, лучший, подход заключается в том, чтобы переместить весь код сервера в его собственный каталог, а также весь код клиента в свой собственный каталог. (Это предполагает, что вы можете аккуратно разделить код на две части.) Затем в верхнем каталоге должен быть небольшой Makefile, цели которого исполняют Makefile в каждом из подкаталогов.
Добавление
Вы заставляете верхний Makefile вызывать Makefiles в подкаталогах, кодируя правила, подобные этим для каждого подкаталога:
clt: cd clt; make $(MAKEFLAGS)
svr: cd svr; make $(MAKEFLAGS)
Это порождает подпроцесс для выполнения другого make
в каталоге clt
и другого подпроцесса make
для подкаталога svr
.