Почему я получаю предупреждение Make: Circular Dependency Dropped? - PullRequest
0 голосов
/ 07 ноября 2018

Я впервые использую Makefile. Я должен был написать один для моего школьного задания и столкнулся с ошибкой «make: Circular PhotoLab <- зависимость PhotoLab пропала». Я попытался исследовать, как я обнаружил <a href="https://stackoverflow.com/questions/24904906/make-circular-dependency-dropped"> make: круговая зависимость удалена и Make: круговая зависимость удалена c ++ , и, насколько я понимаю, круговая зависимость - это когда вы создаете что-то от себя, поэтому он будет работать вечно, если не остановится Если моя логика верна, я создаю свои файлы .o из моих файлов .c & .h, а затем связываю свои файлы .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 голосов
/ 07 ноября 2018

Эти две строки являются проблемой. Они говорят, что «PhotoLab» зависит от «PhotoLab» (например), который, очевидно, будет круговой зависимостью.

PhotoLab: PhotoLab

PhotoLabTest: PhotoLabTest
...