错误"没有这样的文件或目录"用Makefile编译时

时间:2017-09-25 02:57:55

标签: c makefile compiler-errors compilation

我正在尝试使用Makefile编译几个.c文件和几个自定义.h文件来生成单个可执行文件。但是在编译过程中我收到的错误是错误"没有这样的文件或目录"。

这是我的Makefile,在编译过程中为什么会忘记头文件的逻辑中是否存在可能的缺陷?

$(BIN)main.o规则期间编译的第21行发生错误。

这是编译时错误:

socs@socsvm:~/Desktop/Programs/CIS2520/root$ make
gcc -Wall -g -std=c99 -c -Iinclude -c ./src/main.c
./src/main.c:4:23: fatal error: structDefns: No such file or directory
#include "structDefns"
                      ^
compilation terminated.
makefile:21: recipe for target 'bin/main.o' failed
make: *** [bin/main.o] Error 1
socs@socsvm:~/Desktop/Programs/CIS2520/root$ 

这是makefile:

CC = gcc
CFLAGS = -Wall -g -std=c99 -Iinclude

BIN = ./bin/
SRC = ./src/
INC = ./include/

$(BIN)main:     $(BIN)main.o $(BIN)book.o $(BIN)store.o $(BIN)boardGame.o
        $(CC) -o $(BIN)main $(BIN)main.o $(BIN)book.o $(BIN)store.o 
$(BIN)boardGame.o

$(BIN)book.o:   $(SRC)book.c $(INC)structDefns.h $(INC)funcDefns.h
        $(CC) $(CFLAGS) -c $(SRC)book.c

$(BIN)boardGame.o:      $(SRC)boardGame.c $(INC)structDefns.h $(INC)funcDefns.h
        $(CC) $(CFLAGS) -c $(SRC)boardGame.c

$(BIN)store.o:  $(SRC)store.c $(INC)structDefns.h $(INC)funcDefns.h
        $(CC) $(CFLAGS) -c $(SRC)store.c

$(BIN)main.o:   $(SRC)main.c $(INC)structDefns.h $(INC)funcDefns.h
                $(CC) $(CFLAGS) -c $(SRC)main.c

对于文件目录,make文件在3个文件夹,bin,src和include之外。 bin是我想要对象和可执行文件的地方,src是.c文件所在的位置,而.h文件位于include文件夹中。

1 个答案:

答案 0 :(得分:1)

从编译命令,错误和错误给出的源代码行:

gcc

它表明./include找不到包含文件。它希望它与main在同一目录中,但是你的Makefile显示它存在于../include(甚至相对于main的-I)。

使用gcc的{​​{1}}标志以及正确的路径。您可以将其与其他CFLAGS一起设置:

CFLAGS = -Wall -g -std=c99 -Iinclude

应该这样做。 (我可能会对路径略有误解。如果仍然失败,请尝试-I./include的变体或main的相对路径:-I../include。但它应该是发出命令的目录中的路径,而不是相对于main.c。)