这是我第一次使用Makefile。我必须为学校作业写一个,然后遇到错误“ make:Circular PhotoLab <-PhotoLab依赖关系丢失”。正如我发现的make: Circular dependency dropped和Make: 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
答案 0 :(得分:1)
这两行是问题所在。他们说“ PhotoLab”依赖于“ PhotoLab”(例如),这显然是循环依赖项。
PhotoLab: PhotoLab
PhotoLabTest: PhotoLabTest