【发布时间】:2018-03-05 22:30:36
【问题描述】:
我正在尝试使用 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$
这是生成文件:
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 文件在 bin、src 和 include 3 个文件夹之外。 bin 是我希望对象和可执行文件所在的位置,src 是 .c 文件所在的位置,而 .h 文件位于包含文件夹中的位置。
【问题讨论】:
-
如果不查看您的所有文件和目录结构,我们就无法判断。据我们所知,这可能是一个错字。
-
如果你显示完整的编译命令+错误也有帮助。
-
您列出了两个头文件作为依赖项,但我在实际命令中没有看到任何标志来提供路径,因此可以实际找到这些文件。也就是说,CFLAGS 不包括 -I$(INC) 或类似内容。
-
所以你的意思是编译器无法将头文件与实际的c文件本身连接起来?
-
它有,前提是你给编译器正确的标志,和/或 c 文件有正确的头文件路径。也许你应该阅读在编译期间包含头文件
标签: c makefile compiler-errors compilation