I explicitely create variables for sources and include files, e.g.
SRCDIR = src
INCDIR = include
BINDIR = bin
and the use it to build sources, e.g.
...
$(BINDIR)/foo: $(SRCDIR)/foo.c $(INCDIR)/foo.h $(INCDIR)/common.h
$(CC) $(CPPFLAGS) $(LDFLAGS) -o $@ $<
I believe there are many more concise ways to do the same.