Я вижу две проблемы:
- Ваше правило
%.o
фактически не создает %.o
файлов. prog/$^
расширяется до prog/a.o b.o main.o
, потому что $(OBJ)
это a.o b.o main.o
.
Я бы сделал это так:
Вместо OBJ = $(SRC:.c=.o)
, напишите
OBJ = $(SRC:%.c=prog/%.o)
Правило для объектных файлов тогдастановится
prog/%.o : %.c
$(CC) -o $@ -c $< $(CFLAGS)
и исполняемый файл может быть создан с помощью
$(EXEC) : $(OBJ)
$(CC) -o $@ $^ $(CFLAGS)
Наконец, по соображениям здравого смысла ваши правила очистки, вероятно, должны быть
clean :
rm -rf prog/*.o
mrproper : clean
rm -rf $(EXEC)