Правило make работает неправильно

Есть makefile для сборки многофайлового проекта на C. Текст файла в месте с ошибкой:

C = gcc 
CFLAGS = -Wall -lmsvcrt

SRC_C = $(wildcard $(SRC_D)/*.c) 
OBJ_C = $(patsubst $(SRC_D)/%.c, $(OBJ_D)/%.o, $(SRC_C))

$(OBJ_C): $(SRC_C)
    $(C) $(CFLAGS) -c $< -o $@

Но при запуске выдаёт следующее:

gcc  -Wall -lmsvcrt -c src/ConfMain.c -o obj/ConfMain.o
gcc  -Wall -lmsvcrt -c src/ConfMain.c -o obj/FileQuery.o
gcc  -Wall -lmsvcrt -c src/ConfMain.c -o obj/main.o
gcc -lgcc -o bin/DataBase obj/ConfMain.o obj/FileQuery.o obj/main.o

Я перерыл мануал и перегуглил всё что можно (даже на английском), НО не смог найти где я ошибся.


Ответы (1 шт):

Автор решения: Химик

Методом научного тыка нашёл, что если заменить:

$(OBJ_C): $(SRC_C)
    $(C) $(CFLAGS) -c $< -o $@

на следующее:

$(OBJ_C): $(OBJ_D)/%.o : $(SRC_D)/%.c
    $(C) $(CFLAGS) -c $< -o $@

Ошибка чудом исчезает.

P.S.>> Полный исправленный makefile (в комментариях к вопросу спрашивали):

C = gcc 
DEBUGER = gdb
ld = gcc
ld_FLAGS = -lgcc -lmsvcrt
CFLAGS = -Wall 

SRC_D = src
OBJ_D = obj
BIN_D = bin

SRC_C = $(wildcard $(SRC_D)/*.c) 
OBJ_C = $(patsubst $(SRC_D)/%.c, $(OBJ_D)/%.o, $(SRC_C))
TARGET1 = DataBase

all : $(TARGET1)

$(TARGET1): $(OBJ_C)
    $(ld) $(ld_FLAGS) -o $(BIN_D)/$@ $^

$(OBJ_C): $(OBJ_D)/%.o : $(SRC_D)/%.c
    $(C) $(CFLAGS) -c $< -o $@

DEBUG: $(TARGET1)
    $(DEBUGER) $(BIN_D)/$(TARGET1)
    cls
mkdirs:
    mkdir $(OBJ_D)
    mkdir $(BIN_D)

clear: 
    del "$(OBJ_D)/" /Q
→ Ссылка