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 部分该页面,如果您对详细信息不感兴趣。
我正在尝试制作一个 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 部分该页面,如果您对详细信息不感兴趣。