Take a look at FreeBSD. Here’s what a typical Makefile looks like:
# $FreeBSD$
PACKAGE=runtime PROG= setfacl SRCS= file.c mask.c merge.c remove.c setfacl.c util.c
.include <bsd.prog.mk>
So, yeah, at least for code in C you can have something maintainable in make(1), it’s just you need to structure your project in a sensible way.