2012-04-03 2 views
1

У меня возникают ошибки компиляции. У меня есть один файл cpp и множество заголовков. Для make-файла я думал, что мне нужно перечислить все файлы заголовков. LinkedBinaryTree.h содержит все остальные файлы заголовков. Это то, что я писал:C++ makefile несколько заголовков один cpp

all: hw4a 

hw4a: LinkedBinaryTree.cpp linkedBinaryTree.h booster.h arrayQueue. binaryTree.h  binaryTreeNode.h myExceptions.h queue.h 
g++ -o hw4a LinkedBinaryTree.cpp LinkedBinaryTree.h booster.h arrayQueue.h binaryTree.h  binaryTreeNode.h myExceptions.h queue.h 

clean: 
rm hw4a 

мне сказали, что O просто нужно сделать:

g++ LinkedBinaryTree.cpp -o bst.exe 

Какой из них правильный?

ответ

0

Что вам сказали. Включить следует включить, а не составлять отдельные единицы.

2

Последнее исправление: g++ -o result.exe source.cpp. Вы должны не включать заголовочные файлы в команде компилятора, так как они автоматически включаются в препроцессор уже.

Конечно, заголовочные файлы по-прежнему находятся в зависимостях и должны быть указаны в файле makefile. Вот почему существует специальный универсальный синтаксис для обозначения первого Справочно:

.phony: all clean 

all: result.exe 

result.exe: main.o 
    $(CXX) -o [email protected] $+ 

main.o: main.cpp class1.hpp lib2.hpp 
    $(CXX) -c -o [email protected] $< 

$+ означает «все dependecies» (с повторением, $^ также расширяется до всех зависимостей, но uniquified), как вам нужно для link, а $< означает только «первая зависимость», как вам нужно для компиляции.

Пока вы на нем, посыпайте щедрые предупреждающие флажки над командами компилятора.

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