【发布时间】:2011-12-23 06:13:55
【问题描述】:
我正在尝试按如下方式组织我的项目目录
贝壳
|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
据我所知,一切都应该没问题,但是当我从根目录进行 make 时出现此错误
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..?我个人会将 *.o 构建到 src 的 makefile 中,并将最终结果构建到 build 的 lib 文件中。我不是说这是最好的,只是我是怎么做的。如果您想查看我的 Makefile 示例,请参阅 here -
我无法重现该错误,而且我使用的是完全相同的命令。你能发布你正在使用的实际makefile吗?另外,您使用的是什么版本的 gcc?
-
看起来您将 shutil.c 更改为 #include "inc/shell.h"。将其改回“shell.h”,-Iinc 应该会选择它。
标签: c makefile subdirectory