Каждый раз, когда вы видите правило, в котором сгенерированный вывод не попадает в файл $@
, вы знаете, что это неправильно.Make установит автоматическую переменную $@
на имя файла, который он ожидает создать, и если рецепт сделает что-то другое, make-файл не будет работать.
Ваше правило отправляет файл на $(OBJDIR)/$@
, а не$@
, так что это неправильно.
Итак, вам нужно написать свое правило шаблона следующим образом:
%.o: %.c
@mkdir -p $(@D)
$(CC) $(CFLAGS) -c $< -o $@
Если это не сработает, вам нужно будет предоставить больше информациитакие как пример строки компиляции make, какие ошибки вы видите и т. д.