Makefile:C文件未编译

问题描述 投票:0回答:1

我是编码的新手,所以请多多包涵。我正在尝试编译我的所有头文件,并使用GNU make将它们放置到生成目录中。每当我运行make main时,都会出现以下错误:

make: *** No rule to make target 'build/header1.o', needed by 'main'.  Stop.

MakeFile:

CC = gcc
_OBJS = header1.o header2.o
BUILD_DIR = build
SOURCE_DIR = src
BIN_DIR = bin

OBJS = $(patsubst %,$(BUILD_DIR)/%,$(_OBJS))


$(BUILD_DIR)/log.o : $(SOURCE_DIR)/log/log.c
    gcc $(CFLAGS) -c $< -o $@ -DLOG_USE_COLOR

$(BUILD_DIR)/%.o : $(SOURCE_DIR)/%/%.c 
   gcc $(CFLAGS) -c $< -o $@

main : $(OBJS)
   $(CC) $(SOURCE_DIR)/[email protected] $? -o $(BIN_DIR)/$@ $(LFLAGS)

.PHONY: clean

clean:
    rm -rf ./$(BUILD_DIR)/*

目录结构:├──箱│└──二进制├──建筑│├──obj文件在这里├──文档├──Makefile├──自述文件└──src├──页眉1│├──header1.c│└──header1.h├──header2.c│├──header2.c│├──header2.h|──main.c

$(BUILD_DIR)/%.o : $(SOURCE_DIR)/%/%.c规则未构建对象。此错误的原因是什么?

c makefile gnu-make
1个回答
0
投票

我认为您是对的,问题出在此行$(BUILD_DIR)/%.o : $(SOURCE_DIR)/%/%.c

Makefile doc开始,它表示模式规则只能包含一个%字符,而您的字符有两个。

© www.soinside.com 2019 - 2024. All rights reserved.