为什么会收到Make:循环依赖关系已删除警告?

时间:2018-11-07 10:48:25

标签: c makefile dependencies circular-dependency

这是我第一次使用Makefile。我必须为学校作业写一个,然后遇到错误“ make:Circular PhotoLab <-PhotoLab依赖关系丢失”。正如我发现的make: Circular dependency droppedMake: circular dependency dropped c++一样,我尝试进行研究,并且据我所知,循环依赖是指您从自身创建某些东西时,它将永久运行,除非停止。如果我的逻辑正确,则从.c和.h文件构建.o文件,然后将.o文件链接在一起以构建可执行文件。所以我不太明白为什么会得到循环依赖错误。我的逻辑哪里出问题了?

仅出于链接阶段的目的,我有一个名为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

1 个答案:

答案 0 :(得分:1)

这两行是问题所在。他们说“ PhotoLab”依赖于“ PhotoLab”(例如),这显然是循环依赖项。

PhotoLab: PhotoLab

PhotoLabTest: PhotoLabTest