Если вы используете GNU Make , то
$(filter %.c,$^)
выполнит трюк (фильтр возвращает все слова, соответствующие заданному шаблону из списка, filter-out возвращает несоответствиеиз них).Если вы используете более примитивный make, вам придется прибегнуть к
APP_O_C_DEPS = app.c b.c a.c
APP_O_NONC_DEPS = h.h file.list
app.o: $(APP_O_C_DEPS) $(APP_O_NONC_DEPS)
...
Примечание: Способ работы переменных в Make позволяет вам сказать
c_deps = $(filter %.c,$^)
app.o: app.c b.c a.c h.h file.list
something $(c_deps)
и расширится до зависимостей .c текущей цели.