在尝试编译我的C程序时出现错误:
rm -rf *.o *.gch deq_tester simple_testerv2
gcc -Werror -Wall -g -c simple_testerv2.c deq.h
gcc -Werror -Wall -g -c deq_tester.c deq.h
gcc -Werror -Wall -g -o simple_testerv2 simple_testerv2.o deq.o
gcc: error: deq.o: No such file or directory
makefile:10: recipe for target 'simple_testerv2' failed
make: *** [simple_testerv2] Error 1
这是我的makefile:
all: simple_testerv2 deq_tester
CC = gcc
CFLAGS = -Werror -Wall -g
deq_tester: deq_tester.o deq.o
$(CC) $(CFLAGS) -o deq_tester deq_tester.o deq.o
simple_testerv2: simple_testerv2.o deq_tester.o
$(CC) $(CFLAGS) -o simple_testerv2 simple_testerv2.o deq.o
deq_tester.o:
$(CC) $(CFLAGS) -c deq_tester.c deq.h
simple_testerv2.o:
$(CC) $(CFLAGS) -c simple_testerv2.c deq.h
deq.o:
$(CC) $(CFLAGS) -c deq.c deq.h
clean:
rm -rf *.o*.gch deq_tester simple_testerv2
我将我的makefile文件与我的文件c文件和头文件放在同一目录中,但是每次我编译时都会出现此错误。任何帮助将不胜感激。
谢谢
答案 0 :(得分:0)
将评论转换为答案。
您将simple_testerv2
与deq.o
关联,但不要告诉make
您将这样做。在那里也添加一个依赖项deq.o
(并删除对deq_tester.o
的不必要的依赖关系)。
simple_testerv2: simple_testerv2.o deq.o
$(CC) $(CFLAGS) -o simple_testerv2 simple_testerv2.o deq.o
考虑宏是否可以提供更多帮助:
PROG2 = simple_testerv2
OBJ2 = simple_testerv2.o deq.o
${PROG2}: ${OBJ2}
${CC} ${CFLAGS} -o $@ ${OBJ2}
您可以将${PROG2}
添加到all
目标生成的程序列表中(前提是在定义宏后移动all
目标)。
请注意,您的编译行不应尝试编译deq.h
。编译源文件时将包括该文件。 (因此:将$(CC) $(CFLAGS) -c deq.c deq.h
更改为$(CC) $(CFLAGS) -c deq.c
,等等。)的确,您根本不需要指定编译行; make
知道如何将.c
文件转换为.o
文件。所以你可以这样写:
deq_tester.o: deq.h
deq.o: deq.h
simple_testerv2.o: deq.h
这告诉make
文件包含头文件(因此,如果头文件发生更改,则需要重新编译目标文件)。 Make
具有内置规则,可告诉它从xyz.o
构建xyz.c
的过程,因此您无需告诉它有关该依赖项的信息(尽管添加源代码并不会带来任何危害)文件依赖性)。