gpt4 book ai didi

c - 如何让 Makefile 将 obj 文件放在单独的目录中?

转载 作者:行者123 更新时间:2023-11-30 16:09:16 25 4
gpt4 key购买 nike

如果我的 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)/%.o: $(SRC_DIR)/%.c被解析时,它会扩展为

./obj//%.o: ./src//%.c

你有一个额外的/

只需更改您的 OBJ_DIRSRC_DIR 定义即可:

SRC_DIR = ./src
OBJ_DIR = ./obj
<小时/>

您还可以这样简化您的 Makefile:

CFILES = $(wildcard $(SRC_DIR)/*.c)
OBJS = $(CFILES:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)

文件仍然存储在 CFILES 中,但 OBJS 文件列表现在是自动的。

关于c - 如何让 Makefile 将 obj 文件放在单独的目录中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59180047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com