首页 > 解决方案 > 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
        

标签: makefile

解决方案


下面的规则有错别字。尝试修复它(使用 '%' 而不是 '$')。这可能会破坏生成 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 $@

推荐阅读