Цитата(Legotron @ Jun 29 2009, 16:13)

Выделяем папки:
Ищем в них все исходники, формируем из их имен имена объектников и указываем vpath искать исходники для этих объектников в папках, ну а дальше зависимость .o от .c, .cpp, .S:
Код
SRCDIRS = . $(addprefix $(PROJ_SRCTOP)/,$(MODULES))
CSRC = $(wildcard $(addsuffix /*.c,$(SRCDIRS)))
CPPSRC = $(wildcard $(addsuffix /*.cpp,$(SRCDIRS)))
ASRC = $(wildcard $(addsuffix /*.s,$(SRCDIRS)))
## Objects that must be built in order to link
OBJ = $(addprefix $(OBJDIR)/,$(notdir $(CSRC:.c=.o) $(CPPSRC:.cpp=.o) $(ASRC:.s=.o) ))
# search path for common sources and headers
vpath
vpath %.c $(SRCDIRS)
vpath %.cpp $(SRCDIRS)
vpath %.h $(SRCDIRS)
vpath %.s $(SRCDIRS)
## Compile
$(OBJDIR)/%.o: %.c
@echo Compiling: $<
$(CC) $(INCLUDES) $(CFLAGS) -Wa,-ahlmsd=$(LSTDIR)/$(notdir $(<:.c=.lst)) -c $< -o $@
$(OBJDIR)/%.o: %.cpp
@echo Compiling: $<
$(CC) $(INCLUDES) $(CFLAGS) -Wa,-ahlmsd=$(LSTDIR)/$(notdir $(<:.cpp=.lst)) -c $< -o $@
$(OBJDIR)/%.o: %.S
@echo Assembling: $<
$(CC) $(INCLUDES) $(ASMFLAGS) -Wa,-ahlmsd=$(LSTDIR)/$(notdir $(<:.S=.lst)) -c $< -o $@