c - 为什么我得到的是 Make : Circular Dependency Dropped warning?

标签 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

最佳答案

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

PhotoLab: PhotoLab

PhotoLabTest: PhotoLabTest

关于c - 为什么我得到的是 Make : Circular Dependency Dropped warning?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53187948/

相关文章:

java - 在 Java 中处理在线依赖关系的最佳方式

makefile - 在makefile中使用g++和-MMD自动生成依赖

javascript - 记录 javascript 库依赖项的最佳实践

无法理解C中减少/增加 'for'的逻辑

c - 8 位机器上 int 的大小

c++ - 在 C++ 程序中从 C 库调用函数时有什么陷阱吗?

c - 如何制作正确的 C makefile

android - LOCAL_LDLIBS 不起作用,但 LOCAL_LDFLAGS 起作用。为什么?

在堆中分配内存以保存指向字符的指针数组时,代码崩溃

c - makefile 的问题