makefile - Makefile错误:没有规则来制作“build”需要的“bin/functions.o”
问题描述
我有四个文件 driver.c、functions.h、functions.c 和 input.ppm,函数文件位于当前目录的 src 目录中,尝试制作时出现此错误。make:没有规则可以使“build”需要目标“src/functions.o”
CC=gcc
CFLAGS= -Wall -g
LFLAGS=-lm
TARGET=out
C_SRCS := \
$(wildcard *.c) \
$(wildcard src/*.c) \
$(wildcard src/**/*.c)
HDRS := \
$(wildcard *.h) \
$(wildcard src/*.h) \
$(wildcard src/**/*.h)
OBJS := $(patsubst %.c, bin/%.o, $(wildcard *.c))
OBJS += $(filter %.o, $(patsubst src/%.c, bin/%.o, $(C_SRCS)))
all: build
@echo "All Done"
build: $(OBJS)
$(CC) $(OBJS) -o $(TARGET) $(LFLAGS)
bin/%.o: %.c $(HDRS)
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c $< -o $@
bin/$.o: src/$.c $(HDRS)
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c $< -o $@
run: build
./$(TARGET) 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 $@
推荐阅读
- objective-c - MTLCreateSystemDefaultDevice 的引用计数返回值
- swift - PDFView 在导航控制器的根视图中显示时不显示
- python - 如何替换 SymPy 对象中的值?
- r - 改进自动分箱直方图
- web - 客户端服务器数据交换持久性 - 气味
- php - ErrorException 未定义变量:帖子
- c# - 为什么 Visual Studio Code Debugger 无法使用 1.43.1 版(用户设置)?
- linux - Linux HPC 集群设置上的软件安装
- sql-server - SQL Server Management Studio - 将包含软件名称和版本的列添加到具有特定软件的系统的 SQL Query
- python - 在第一个循环中创建一个 key:value 对,并在后续循环中附加更多值