我正在尝试使用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文件夹中。
答案 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
。)