CC = gcc TARGET = a.out DIRS = . subdir1 subdir2 FLAGS = -Wall SRCS = $(foreach dir, $(DIRS), $(shell cd $(dir); ls *.c)) OBJS = $(SRCS:.c=.o) VPATH = $(DIRS) INCLUDES = $(addprefix -I, $(DIRS)) $(TARGET): $(OBJS) $(CC) $(FLAGS) -o $@ $(OBJS) clean: rm -f $(TARGET) $(OBJS) .c.o: $(CC) $(FLAGS) -c $(INCLUDES) $<