2016-06-05 5 views
0

Помимо смешивания и сопоставления файлов .c и .cpp, это простой Makefile, но я не совсем уверен, почему он не компилируется. Я предполагаю, что это из-за ошибки компоновщика, поскольку он только жалуется на сетевой класс. Любой из вас заставляет гуру знать, что случилось со следующим:Makefile: ошибки компоновщика

CC=g++ 
DEBUG=-g 
CFLAGS=$(DEBUG) -Wall -D_POSIX_C_SOURCE -pthread -std=c++0x 
HEADERS=cl_network.h 

%.o: %.c $(HEADERS) 
    $(CC) $(CFLAGS) $< -o [email protected] 

all: server.o client.o cl_network.o 
    $(CC) $(CFLAGS) server.o -o server 
    $(CC) $(CFLAGS) client.o -o client 
    $(CC) $(CFLAGS) cl_network.o -o cl_network 

client.o: client.cpp cl_network.h 
    $(CC) $(CFLAGS) -c client.cpp 

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

cl_network.o: cl_network.cpp cl_network.h 
    $(CC) $(CFLAGS) -c cl_network.cpp 

.PHONY: clean 
clean: 
    rm server.o server client.o client cl_network cl_network.o 

Errors: 
client.cpp:49: undefined reference to `cl_network::cl_network(char*)' 
client.cpp:50: undefined reference to `cl_network::connectToServer()' 
client.cpp:63: undefined reference to `cl_network::~cl_network()' 
client.cpp:63: undefined reference to `cl_network::~cl_network()' 
+0

Sidenote: Если ваш компилятор поддерживает его, используйте -std = C++ 11 вместо -std = с ++ 0x для лучшего художественного балла. :) https://stackoverflow.com/questions/24589105/what-is-the-difference-between-std-c0x-and-std-c11 – Bugfinger

+0

строка: '.PHONY; all' должен быть вставлен перед целью «all» – user3629249

+0

, чтобы избежать множественных оценок макросов, используйте: 'macroName: = содержимое, а не' macroName = contents' – user3629249

ответ

3

Я предполагаю, что вы, вероятно, хотите, чтобы ваша all цель, чтобы выглядеть следующим образом

all: server.o client.o cl_network.o 
    $(CC) $(CFLAGS) server.o cl_network.o -o server 
    $(CC) $(CFLAGS) client.o cl_network.o -o client 
+0

Прямо на деньги. – MrPickles