gpt4 book ai didi

makefile - 为什么 make 提示循环依赖?

转载 作者:行者123 更新时间:2023-12-04 01:50:34 26 4
gpt4 key购买 nike

我为我的项目构建了一个 make 文件,它可以工作(一切都编译),但它给出了这些恼人的错误消息:

make: Circular zpr.c <- zpr.o dependency dropped.
gcc -Wall -c -o zpr.o zpr.c
make: Circular readjpeg.c <- readjpeg.o dependency dropped.
gcc -Wall -c -o readjpeg.o readjpeg.c
make: Circular readppm.c <- readppm.o dependency dropped.
gcc -Wall -c -o readppm.o readppm.c
make: Circular SceneNode.cpp <- SceneNode.o dependency dropped.
g++ -c -o SceneNode.o SceneNode.cpp
make: Circular BoundingBoxNode.cpp <- BoundingBoxNode.o dependency dropped.
g++ -c -o BoundingBoxNode.o BoundingBoxNode.cpp
make: Circular GeometryNode.cpp <- GeometryNode.o dependency dropped.
g++ -c -o GeometryNode.o GeometryNode.cpp
make: Circular SceneGraph.cpp <- SceneGraph.o dependency dropped.
g++ -c -o SceneGraph.o SceneGraph.cpp
make: Circular testgraph.cpp <- testgraph.o dependency dropped.
g++ -c -o testgraph.o testgraph.cpp

我的 makefile 一点也不复杂,所以希望有人能发现错误。
GXX=g++
CC=gcc
CFLAGS=-Wall

LIBS=-lGL -lglut -ljpeg

OBJS=helpers.o loadobj.o zpr.o readjpeg.o readppm.o SceneNode.o BoundingBoxNode.o GeometryNode.o SceneGraph.o testgraph.o
OBJS2=testgraph.o SceneGraph.o GeometryNode.o BoundingBox.o SceneNode.o readppm.o readjpeg.o zpr.o loadobj.o helpers.o
SRCS=testgraph.cpp SceneGraph.cpp SceneNode.cpp

.o.cpp:
$(GXX) $(CFLAGS) -c $<

.o.c:
$(CC) $(CFLAGS) -c $<

testgraph: $(OBJS)
$(GXX) $(LIBS) $(OBJS) -o testgraph

clean:
rm *.o

最佳答案

你的隐性规则是罪魁祸首。它们的扩展名以与 make 理解它们的顺序相反的顺序列出。

.o.c:

告诉 make .c 文件是从 .o 文件创建的。由于已经有一条规则表明 .o 文件是从 .c 文件创建的,因此您具有循环依赖关系,因此会出现错误。

解决方案是(或者应该是,假设合理配置的 make)简单。

在真正常见的情况下(例如 C++ 源代码),您(通常)不需要指定自己的编译规则。仅指定以下内容会更简单:
CFLAGS=-Wall
LOADLIBES=-lGL -lglut -ljpeg

OBJS=helpers.o loadobj.o zpr.o readjpeg.o readppm.o SceneNode.o \
BoundingBoxNode.o GeometryNode.o SceneGraph.o testgraph.o

all: testgraph

testgraph: $(OBJS)

这也可能帮助您避免两个错误。
  • 你写的规则说 .o 文件是从 .c 文件创建的,这是向后的。但是正确的规则已经存在于几乎所有版本的 make 中。
  • 您已经在目标文件之前列出了库。这在某些使用 ELF 格式对象的平台上是偶然的。但它仍然是错误的。在对象之后列出库,因为加载库只是为了满足未定义的外部对象。
  • 关于makefile - 为什么 make 提示循环依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/665180/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com