我收到一个makefile错误文件(点)-没有此类文件或目录。有没有什么办法解决这一问题?

时间:2018-10-06 13:52:38

标签: gcc makefile

在尝试编译我的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文件和头文件放在同一目录中,但是每次我编译时都会出现此错误。任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

将评论转换为答案。

您将simple_testerv2deq.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的过程,因此您无需告诉它有关该依赖项的信息(尽管添加源代码并不会带来任何危害)文件依赖性)。