"Makefile circular dependency dropped"错误



我在尝试运行 make 客户端make 服务器时收到 makefile 错误。我四处寻找为什么会这样,但我无法弄清楚。这是我的制作文件:

CC=g++
CFLAGS=-c -std=c++11 -Wno-write-strings
LDFLAGS=
SOURCES= UDP_Client.cpp UDP_Server.cpp
CSOURCES = cmain.cpp UDP_Client.cpp
SSOURCES = smain.cpp UDP_Server.cpp
OBJECTS=$(SOURCES:.cpp=.o)
COBJECTS=$(CSOURCES:.cpp=.o)
SOBJECTS=$(SSOURCES:.cpp=.o)
EXECUTABLE=run
CEXECUTABLE=client
SEXECUTABLE=server

all:
    @echo "Please specifiy client or server"
client: $(CSOURCES) $(CEXECUTABLE)
server: $(SSOURCES) $(SEXECUTABLE)
$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@
$(CEXECUTABLE): $(COBJECTS) 
    $(CC) $(LDFLAGS) $(COBJECTS) -o $@
$(SEXECUTABLE): $(SOBJECTS) 
    $(CC) $(LDFLAGS) $(SOBJECTS) -o $@
.cpp.o:
    $(CC) $(CFLAGS) $< -o $@
clean:
    rm *.o

我得到的错误看起来很简单,但这是它们的实际文本:

make: Circular client <- client dependency dropped.

你告诉 make client取决于client$(CEXECUTABLE)展开后),这显然是错误的。

你的制作文件有点令人困惑,但我认为你想做的是

CXXFLAGS := -std=c++11 -Wno-write-strings
cobjs := cmain.o UDP_Client.o
sobjs := smain.o UDP_Server.o
.PHONY: clean
client: $(cobjs)
server: $(sobjs)
client server:
    $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@
clean:
    $(RM) $(cobjs) $(sobjs)

不需要你定义的大多数规则和变量,make已经知道如何编译东西。实际上,如果您将cmain.cpp重命名为client.cpp并将smain.o重命名为server.cpp(并相应地更改make文件中.o文件的名称),您甚至不需要clientserver的配方。

我不确定你想用run做什么,它是一个不同的可执行文件吗?如果是这样,它怎么能依赖于UDP_Client.oUDP_Server.o,因为大概两者都没有定义main函数?

最新更新