gpt4 book ai didi

c - Makefile 子目录

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:17 27 4
gpt4 key购买 nike

我正在尝试按如下方式组织我的项目目录

外壳
|inc/[头文件]
|obj/[目标文件]
|src/[源文件]
|生成文件
|可执行

根文件夹中的所有内容都可以正常编译,但我在修改我的 makefile 以适应不同目录中的所有内容时遇到了困难。

这是我的 makefile 在没有目录的情况下的样子

OBJS = shutil.o parser.o sshell.o
HEADER_FILES = shell.h parser.h
EXECUTABLE = sshell
CFLAGS = -Wall
CC = gcc
#Create main executable
$(EXECUTABLE): $(OBJS)
$(CC) -o $(EXECUTABLE) $(OBJS)
#Create object files
%.o: %.c
$(CC) $(CFLAGS) -I. -c -o $@ $<
$(OBJS) : $(HEADER_FILES)

我已经尝试将目录添加到定义中(对于 obj/和 inc/目录)

OBJS = obj/shutil.o obj/parser.o obj/sshell.o

并将%.o 和%.c 的每个实例修改为obj/%.o 和src/%.c

据我所知,一切都应该没问题,但是当我从根目录创建时出现此错误

gcc -Wall -Iinc -c -o obj/shutil.o src/shutil.c
src/shutil.c:8:23: fatal error: inc/shell.h: No such file or directory
compilation terminated.

任何人都可以在这里找到我做错了什么吗?几天来我一直在为此苦苦挣扎。

最佳答案

-I. 更改为 -I${CURDIR}。前者将正在编译的源目录添加到包含路径列表中,即 shell/src。后者添加了shell,这可能就是你想要的。

您也可以看看 Building multiple executables with similar rules用于微型非递归 make 框架。

关于c - Makefile 子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8030672/

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