“Makefile循环依赖关系丢失”错误

时间:2016-05-19 19:34:06

标签: makefile

尝试运行 make client make server 时,我遇到了makefile错误。我一直在寻找原因,但我无法理解。这是我的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.

1 个答案:

答案 0 :(得分:1)

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

你的makefile有点令人困惑,但我认为你想要做的是

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(并相应地更改了makefile中.o文件的名称),那么您就赢了甚至需要clientserver的配方。

我不确定你要对run做什么,它是不同的可执行文件吗?如果是这样,它如何取决于UDP_Client.oUDP_Server.o,因为可能没有定义main函数?