У меня возник небольшой вопрос по Makefile. Условный пример (в реальности всё не так, но это минимальный пример, когда проявляется проблема):
SOURCES=$(wildcard *.c)
HEADERS=$(wildcard *.h)
EXECUTABLE=build/test.elf
OBJECTS=$(foreach SOURCE,$(SOURCES),build/$(SOURCE:.c=.o))
all: build $(EXECUTABLE)
build:
mkdir -p build
%.o: %.c $(HEADERS)
$(CC) -c -o $@ $<
%.elf: $(OBJECTS)
$(CC) -o $@ $(OBJECTS)
clean:
rm -rfv build
В каталоге сборки у нас лежит один-единственный main.c для теста.
Допустим, я хочу складывать все объектные и бинарные файлы в подкаталог build, чтобы не засорять дерево исходников. В итоге получаю:
$ make
mkdir -p build
make: *** Нет правила для сборки цели «build/test.elf», требуемой для «all». Останов.
Если убрать добавление build/ ко всем именам объектных файлов, то всё работает. А я таки хочу добавлять. Что мне делать?