2016-05-19 59 views
1

嘗試運行時出現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 [email protected] 

$(CEXECUTABLE): $(COBJECTS) 
    $(CC) $(LDFLAGS) $(COBJECTS) -o [email protected] 

$(SEXECUTABLE): $(SOBJECTS) 
    $(CC) $(LDFLAGS) $(SOBJECTS) -o [email protected] 

.cpp.o: 
    $(CC) $(CFLAGS) $< -o [email protected] 

clean: 
    rm *.o 

而且我得到的錯誤看起來很簡單,但這裏是他們的實際文本:

make: Circular client <- client dependency dropped. 

回答

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 [email protected] 
clean: 
    $(RM) $(cobjs) $(sobjs) 

你不需要大部分你所定義的規則和變量,使已經知道如何編譯東西。實際上,如果您將cmain.cpp重命名爲client.cppsmain.oserver.cpp(並相應地更改生成文件中.o文件的名稱),則您甚至不需要clientserver的配方。

我不確定你想用run做什麼,它是不同的可執行文件嗎?如果是這樣,它怎麼能取決於UDP_Client.oUDP_Server.o,據推測既沒有定義main函數?