Makefile 生成文件错误:没有要生成的规则";bin/functions.o“;,“需要”;“建立”;

Makefile 生成文件错误:没有要生成的规则";bin/functions.o“;,“需要”;“建立”;,makefile,Makefile,我有四个文件driver.c、functions.h、functions.c和input.ppm。函数文件位于当前目录中的src目录中,我在尝试创建时遇到此错误。make:没有规则使“build”需要目标“src/functions.o” CC=gcc CFLAGS=-Wall-g LFLAGS=-lm 目标=输出 C_SRCS:=\ $(通配符*.c)\ $(通配符src/*.c)\ $(通配符src/***/.c) HDRS:=\ $(通配符*.h)\ $(通配符src/*.h)\ $(通配

我有四个文件driver.c、functions.h、functions.c和input.ppm。函数文件位于当前目录中的src目录中,我在尝试创建时遇到此错误。make:没有规则使“build”需要目标“src/functions.o”

CC=gcc
CFLAGS=-Wall-g
LFLAGS=-lm
目标=输出
C_SRCS:=\
$(通配符*.c)\
$(通配符src/*.c)\
$(通配符src/***/.c)
HDRS:=\
$(通配符*.h)\
$(通配符src/*.h)\
$(通配符src/***/.h)
OBJS:=$(patsubst%.c,bin/%.o,$(通配符*.c))
OBJS+=$(过滤器%.o,$(patsubst src/%.c,bin/%.o,$(c_SRCS)))
全部:构建
@回音“全部完成”
生成:$(OBJS)
$(CC)$(OBJS)-o$(目标)$(LFLAGS)
仓位/%.o:%.c$(HDRS)
@mkdir-p$(dir$@)
$(CC)$(CFLAGS)-c$<-o$@
bin/$.o:src/$.c$(HDRS)
@mkdir-p$(dir$@)
$(CC)$(CFLAGS)-c$<-o$@
运行:构建
./$(目标)input.ppm key decrypt.ppm

以下规则中存在键入错误。请尝试修复它(使用“%”而不是“$”)。这可能会破坏生成bin/functions.o的规则

bin/$.o:src/$.c$(HDRS)
@mkdir-p$(dir$@)
$(CC)$(CFLAGS)-c$<-o$@
应该是:

bin/%.o: src/%.c $(HDRS)
       @mkdir -p $(dir $@)
       $(CC) $(CFLAGS) -c $< -o $@
bin/%.o:src/%.c$(HDRS)
@mkdir-p$(dir$@)
$(CC)$(CFLAGS)-c$<-o$@

欢迎使用堆栈溢出。似乎
src/functions.o
正在进入您的
OBJS
列表,但我不认为这是可能的。请尝试打印完整列表(使用
$(info$(OBJS))
)并告诉我们它是什么。然后尝试注释
OBJS+=$(筛选…
行,再次运行并告诉我们结果。
bin/$.o: src/$.c $(HDRS)
       @mkdir -p $(dir $@)
       $(CC) $(CFLAGS) -c $< -o $@
bin/%.o: src/%.c $(HDRS)
       @mkdir -p $(dir $@)
       $(CC) $(CFLAGS) -c $< -o $@