【发布时间】:2019-12-04 15:59:33
【问题描述】:
如果我的 Makefile 看起来像这样:
.PHONY: clean build all
# compilation settings
CC = gcc
CFLAGS = -I$(INCLUDE_DIR) -Wall -Wextra -Werror -pedantic -std=gnu99 -pedantic -Wmissing-prototypes -Wstrict-prototypes -Wold-style-definition -g
# directory paths
INCLUDE_DIR = ./include/
SRC_DIR = ./src/
OBJ_DIR = ./obj/
# file lists
CFILES = $(wildcard ./src/*.c)
OBJS = ./obj/hashtable.o ./obj/infoRetrieval.o ./obj/sort.o ./obj/search.o
# binary
BIN = search
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -o $@ -c $<
$(BIN): $(OBJS)
$(CC) -o $@ $(OBJS)
clean:
rm -f $(OBJS) $(BIN) *~
而我的项目目录的结构是这样的:
.
|-- Makefile
|-- README.md
|-- include
| |-- hashtable.h
| |-- infoRetrieval.h
| `-- sort.h
|-- obj
`-- src
|-- hashtable.c
|-- infoRetrieval.c
|-- p5docs
| |-- D1.txt
| |-- D2.txt
| `-- D3.txt
|-- search.c
`-- sort.c
为什么我会收到此错误消息?
make: *** No rule to make target `obj/hashtable.o', needed by `search'. Stop.
我的目标是编译我的项目,以便头文件、源文件和目标文件都位于它们自己的目录中以用于组织目的。
【问题讨论】:
-
错字?
OBJ_DIR应该定义为:OBJ_DIR = ./obj(没有最终的/)