这是我第一次使用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
最佳答案
这两行就是问题所在。他们说“PhotoLab”依赖于“PhotoLab”(例如),这显然会成为循环依赖。
PhotoLab: PhotoLab
PhotoLabTest: PhotoLabTest
关于c - 为什么我得到的是 Make : Circular Dependency Dropped warning?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53187948/