2013-06-29 5 views
1

Я пишу небольшую программу, известную как «Центр оповещения», а основными классами/объектами, которые я использую, являются: Point, Line и Building. Содержимое моего файла Makefile:C++ - Проблемы с Makefile

building.o: building.h line.h point.h building.cpp 
    g++ -c building.cpp 
line.o: line.h point.h line.cpp 
    g++ -c line.cpp 
point.o: point.h point.cpp 
    g++ -c point.cpp 
alert_center: point.o line.o building.o 
    g++ point.o line.o building.o runner.cpp -o alert_center 

Проблема в том, что он учитывает только первый файл, указанный в списке. Например, если я изменил line.cpp, а затем запустил make, ничего не произойдет, и он скажет, что building.o не изменился. Изменение будет скомпилировано только в том случае, если я сделаю правило для line.o первым. Кто-нибудь знает, почему это происходит?

+1

Вам нужно «сделать alert_center». Просто набирать 'make' делает цель * first *. (В качестве альтернативы переместите цель «alert_center» в начало файла makefile.) –

+0

О, вау, тупая ошибка. Благодаря! –

ответ

4

Сделать alert_center цель по умолчанию. Вы можете сделать это явно с помощью .default (см. this) или просто перечислить его как первую цель, чтобы сделать ее по умолчанию.

В случае нескольких целей обычно существует псевдо-цель с именем all и ее значение по умолчанию. См. Рекомендуемые целевые показатели here.