为什么我会收到 Make: Circular Dependency Dropped 警告?

Why am I getting a Make: Circular Dependency Dropped warning?

这是我第一次使用Makefile。我不得不为我的学校作业写一个,并且 运行 进入错误 "make: Circular PhotoLab <- PhotoLab dependency dropped." 我已经尝试研究,正如我发现 make: Circular dependency dropped and ,据我所知,循环依赖是当你从它自己创造一些东西时,所以它将永远 运行 除非停止。如果我的逻辑是正确的,我会从我的 .c 和 .h 文件构建我的 .o 文件,然后 link 我的 .o 文件一起构建我的可执行文件。所以我真的不明白为什么会出现循环依赖错误。我的逻辑哪里出了问题?

只是为了在 linking 阶段澄清,我有一个名为 libfilter.a 的文件,它由 DIPs.o 和 Advanced.o

组成
#variable definitions
CC = gcc
DEBUG = -g
CFLAGS = -Wall -ansi -std=c99 $(DEBUG) -c
LFLAGS = -Wall $(DEBUG)

#convenience targets
all: PhotoLab PhotoLabTest

PhotoLab: PhotoLab

PhotoLabTest: PhotoLabTest

clean:

        rm -f *.o
        rm -f PhotoLab
        rm -f PhotoLabTest
        rm -f bw.ppm
        rm -f edge.ppm
        rm -f shuffle.ppm
        rm -f brightness.ppm
        rm -f hmirror.ppm
        rm -f hue.ppm

test: PhotoLab
        ./PhotoLab

#compilation rules
PhotoLab: FileIO.o Advanced.o DIPs.o Main.o
        $(CC) $(LFLAGS) FileIO.o Main.o -lm -lfilter -L. -o PhotoLab

PhotoLabTest: FileIO.o Advanced.o DIPs.o Main2.o
        $(CC) $(LFLAGS) FileIO.o Main2.o -lm -lfilter -L. -o PhotoLabTest

Main.o: PhotoLab.c Constants.h FileIO.h DIPs.h Advanced.h
        $(CC) $(CFLAGS) PhotoLab.c -o Main.o

Main2.o: PhotoLab.c Constants.h FileIO.h DIPs.h Advanced.h
        $(CC) -Wall -ansi -std=c99 -DDEBUG -c PhotoLab.c -o Main2.o

FileIO.o: FileIO.c FileIO.h Constants.h
        $(CC) $(CFLAGS) FileIO.c -o FileIO.o

DIPs.o: DIPs.c DIPs.h Constants.h
        $(CC) $(CFLAGS) DIPs.c -o DIPs.o

Advanced.o: Advanced.c Advanced.h Constants.h
        $(CC) $(CFLAGS) Advanced.c -o Advanced.o

这两行就是问题所在。他们说 "PhotoLab" 依赖于 "PhotoLab" (例如)这显然是一个循环依赖。

PhotoLab: PhotoLab

PhotoLabTest: PhotoLabTest