我已经为我的项目构建了一个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
Run Code Online (Sandbox Code Playgroud)
我的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
Run Code Online (Sandbox Code Playgroud)
RBe*_*eig 18
你的隐含规则是罪魁祸首.它们具有以与make如何理解它们相反的顺序列出的扩展名.
.o.c:
Run Code Online (Sandbox Code Playgroud)
告诉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)
Run Code Online (Sandbox Code Playgroud)
这可能也可以帮助您避免两个错误.
你写的规则说.o文件是从.c文件创建的,这是向后的.c文件.但几乎所有版本的make中都存在正确的规则.
您已在目标文件之前列出了库.这在使用ELF格式对象的某些平台上偶然起作用.但它仍然是错误的.在对象之后列出库,因为仅加载库以满足未定义的外部.
| 归档时间: |
|
| 查看次数: |
27749 次 |
| 最近记录: |