makefile 不改变输入文件名

makefile not changing input filename

我正在尝试制作一个 C 程序并具有以下生成文件:

CC=clang
CFLAGS=-std=c99 -Wall -pedantic
LDFLAGS=
LDLIBS=
OUT=nes_slop
SRC_DIR=src/
OBJ_DIR=obj/
SRCS=$(wildcard $(SRC_DIR)*.c)
OBJS=$(addprefix $(OBJ_DIR),$(notdir $(SRCS:.c=.o)))
MAKE=make
CLEAR=TRUE

all: clean $(OUT)

clean:
    rm -i $(OUT) $(OBJS) -f

$(OUT): $(OBJS)
    $(CC) $(CFLAGS) $(OBJS) -o $(OUT)

$(OBJS): $(SRCS)
    $(CC) -c $(CFLAGS) $(LDLIBS) $< -o $@

一切都很好,直到我有超过 1 个 .c 文件:

clang -c -std=c99 -Wall -pedantic -lncurses  src/gamestate.c -o obj/gamestate.o
clang -c -std=c99 -Wall -pedantic -lncurses  src/gamestate.c -o obj/main.o

所以,不知何故源文件没有更新,它总是 gamestate.c...我的 makefile 有什么问题?感谢您的帮助,谢谢

简而言之,您的规则应如下所示:

$(OBJS): %.o: %.c
    $(CC) -c $(CFLAGS) $(LDLIBS) $< -o $@

您可能还想阅读 this 如何生成自动依赖项(因此,如果您更改头文件,您的 c 文件将根据需要自动重新生成)顶部有一个 TL;DR 部分该页面,如果您对详细信息不感兴趣。