Связать объект с зависимостями - PullRequest
0 голосов
/ 01 марта 2012

дерево моего проекта:

./main.h
./main.cpp
./Makefile
./sources/myclass.cpp
./includes/myclass.h
./objects/

#./Makefile
BUILD = myexecutable

LDFLAGS = -lsfml-graphics -lsfml-window -lsfml-audio -lsfml-system
CXXFLAGS = -Wall
RM = rm -rf

OBJECTS =  main.o $(addprefix $(OBJ_DIR), myclass.o)

OBJ_DIR = objects/
SRC_DIR = sources/

.PHONY: clean

all: clean $(BUILD)

$(BUILD): $(OBJECTS)
    $(CXX) $(LDFLAGS) -o $(BUILD) $(OBJECTS)

$(OBJ_DIR)%.o: $(SRC_DIR)%.cpp
    $(CXX) -MM $(CXXFLAGS) -c $< > $(OBJ_DIR)$*.d # New line for create myclass.d
    $(CXX) $(CXXFLAGS) -c $< -o $@


clean:
    $(RM) $(BUILD) $(OBJ_DIR)*.o

когда я пытаюсь запустить make я получаю это:

$ make
rm -rf myexecutable objects/*.o
g++ -MMD -Wall -c sources/myclass.cpp -o objects/myclass.o
g++ -lsfml-graphics -lsfml-window -lsfml-audio  -lsfml-system -o myexecutable main.o objects/myclass.o
main.o: In function `main':
main.cpp:(.text+0x176): undefined reference to `mynamespace::MyClass::method()'
main.cpp:(.text+0x185): undefined reference to `mynamespace::MyClass::otherMethod()'
main.cpp:(.text+0x406): undefined reference to `mynamespace::MyClass::~MyClass()'
main.cpp:(.text+0x50e): undefined reference to `mynamespace::MyClass::~MyClass()'
collect2: ld devolvió el estado de salida 1
make: *** [myexecutable] Error 1

как исправить main.o зависимость myclass.o?

Редактировать

я добавил новую строку для создания * .d зависимостей * .d файлов, так как не знаю, как использовать

1 Ответ

0 голосов
/ 01 марта 2012

Исправить на:

LIBES = -lsfml-graphics -lsfml-window -lsfml-audio -lsfml-system
$(BUILD): $(OBJECTS)
     $(CXX) -o $(BUILD) $(OBJECTS) $(LIBES)

LIBES должен заменить LDFLAGS, и две строки для BUILD должны быть изменены.

Порядок компоновки очень важен: поместите ваши объектные файлы, затем библиотеки из системных библиотек верхнего и нижнего уровня.

...