make обрабатывает зависимости: make-файл описывает их: двоичный файл зависит от объектных файлов, каждый объектный файл зависит от исходного файла и заголовков ... когда выполняется make, дата файлов сравнивается, чтобы определить, что нужно перекомпилировано.
Можно напрямую вызывать одну цель, чтобы не создавать все, что описано в Makefile.
Кроме того, синтаксис make обеспечивает подстановку, vpath
Все это может быть написано в сценариях оболочки, с тем, что у вас уже есть.