Оно, конечно, оффтопик, но я давно пошёл другим путём - я не перечисляю в makefile файлы проекта вообще.
Компилируется всё, что находится в текущем каталоге, в котором makefile, и в присоединённых модулях (которые в своих каталогах).
Т.е. указываю только каталоги (кроме текущего, он подключается по умолчанию) и "особые" файлы, которые генерируются на лету
и поэтому не обязательно присутствуют на момент запуска make, в следствие чего не попадают в wildcard
makefile проекта кроме прочего содержит, например
Код
# путь к каталогу, от которого начинаются используеміе каталоги исходников,
# относительно каталога с makefile
PROJ_SRCTOP=..
common_makefiles=$(PROJ_SRCTOP)/makefiles
MODULES = c_lib/avr t02bios c_lib/spi/at45 \
c_lib/xmodem_crc c_lib/cbuf c_lib/avr/comm_m128
# это для ГЕНЕРИРУЕМЫХ исходников, скажем, файлов перекодированых строк, создаваемых
# утилитой pyLCDstring либо пожатых и конвертнутых в вид массивов во флеше прошивок мелких FPGA
EXTRA_CSRC = lcd_messages.c
# ...
# тут прочее всякое нужное
# ...
###### you should not need to change the following lines #############
# keep order!
# avreal.make must be included after gcc-avr because of TRGPGM definition
include $(common_makefiles)/gcc-avr.mak
include $(common_makefiles)/avreal.mak
###### additional dependencies
# must be after included makefiles because of main target placed in gcc-avr.mak
lcd_messages.c : lcd_messages.lcd
lcd_messages.h : lcd_messages.lcd
общий gcc-avr.mak помимо прочего содержит
Код
OBJDIR := $(PROJ_SRCTOP)/../obj
LSTDIR := $(PROJ_SRCTOP)/../lst
EXEDIR := $(PROJ_SRCTOP)/../exe
SRCDIRS := . $(addprefix $(PROJ_SRCTOP)/,$(MODULES))
INCDIRS := $(SRCDIRS)
CSRC := $(EXTRA_CSRC) $(wildcard $(addsuffix /*.c,$(SRCDIRS)))
CPPSRC := $(EXTRA_CPPSRC) $(wildcard $(addsuffix /*.cpp,$(SRCDIRS)))
ASRC := $(EXTRA_ASMCSRC) $(wildcard $(addsuffix /*.S,$(SRCDIRS)))
CFLAGS += $(addprefix -I,$(INCDIRS))