Мне нужно создать Makefile, который создает один исполняемый файл из .c файлов в разных папках. Файлы .c включают заголовочные файлы из любой из этих папок. Корневой каталог имеет 3 подкаталога x / y, x / z, a, все эти подкаталоги имеют некоторые файлы .c и .h. Я хочу скомпилировать программу из корневого каталога.
Природа этих подкаталогов в том, что новые .c файлы могут быть добавлены / удалены в любое время, поэтому невозможно жестко закодировать их имена в Makefile.
Пока я создал этот Makefile
CC = gcc
INCLUDES = -Ix/y -Ix/z -Ia -Ilib/include
LIB = -lp -lq -lr
demo: x/y/*_d.o x/z/*_l.o a/*_m.o
$(CC) $^ $(LIB) -Llib -o b/demo.exe
%_d.o:: x/y/%.c
$(CC) $(INCLUDES) -c $<
%_l.o:: x/z/%.c
$(CC) $(INCLUDES) -c $<
%_m.o:: a/%.c
$(CC) $(INCLUDES) -c $<
Мне нужно решение, которое позаботится об этом сценарии самостоятельно. Кроме того, если один файл добавляется в одну из этих папок, то следует создавать только его зависимости, а не создавать все файлы .c заново.
ТИА.