我是编码的新手,所以请多多包涵。我正在尝试编译我的所有头文件,并使用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
规则未构建对象。此错误的原因是什么?
我认为您是对的,问题出在此行$(BUILD_DIR)/%.o : $(SOURCE_DIR)/%/%.c
从Makefile doc开始,它表示模式规则只能包含一个%
字符,而您的字符有两个。