2013-04-15 5 views
0

У меня возникли проблемы с моей MakefileНеопределенная ссылка ошибка в Makefile

assignment3: BSTapp.cpp BST.o 
     g++ -o assignment3 BSTapp.cpp BST.o 
BST.o: BST.cpp BST.h Node.o 
    g++ -c BST.cpp -o BST.o 
Node.o: Node.h Node.cpp 
    g++ -c Node.cpp -o Node.o 

получать неопределенную ссылку на все методы в классе Node. Но если я напрямую компилирую с использованием

g++ -o assignment3 BSTapp.cpp BST.h BST.cpp Node.h Node.cpp 

все работает нормально. Что я делаю неправильно в make-файле?

ответ

2

Потому что вы оставили вне Node.o файла из команды Makefile под assignment3: правила:

g++ -o assignment3 BSTapp.cpp BST.o 

должен быть

g++ -o assignment3 BSTapp.cpp BST.o Node.o 

Примечание:

I. Пожалуйста, не компилировать сами заголовки!

g++ -o assignment3 BSTapp.cpp BST.h BST.cpp Node.h Node.cpp 

должен быть

g++ -o assignment3 BSTapp.cpp BST.cpp Node.cpp 

II. Ваш Makefile крайне неорганизован. Лучше сделайте так:

OBJECTS = $(patsubst %.cpp, %.o, $(wildcard *.cpp)) 

all: assignment3 

assignment3: $(OBJECTS) 
     g++ -o [email protected] $^ 

%.o: %.cpp 
     g++ -c -Wall -o [email protected] $< 
+0

Если я добавлю Node.o в конце, я получаю «Node.o: файл не распознан: формат файла не распознан»? –

+0

@AbhishekIyer Ну, это странно. –

+0

даже с вашей версией make-файла, я получаю ту же ошибку. На mac я получаю «игнорирование файла Node.o, был создан файл был неподдерживаемый формат файла» –

Смежные вопросы