Ошибка при выполнении make: mingw32-make: *** Нет правила для создания цели - PullRequest
0 голосов
/ 26 апреля 2019

Мне нужно создать 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 заново. ТИА.

1 Ответ

0 голосов
/ 26 апреля 2019

Вы в основном там. Вам просто нужно простое правило для компиляции .c в .o, что-то вроде

.c.o: $ (CC) $ (ВКЛЮЧАЕТ) -c $ <</p>

Зависимости с подстановочными знаками в порядке.

...