2015-03-08 3 views
0

При попытке сделать, я получаю сообщение об ошибке: «Нет правила для цели» Объекты/main.o 'необходимы «CrowdSim». Примечание: это моя первая попытка makefile, и я следую пример hereПочему этот файл не работает?

Дополнительная информация:.

+0

Существуют ли файлы 'Source/main.cc' и' Headers/main.h'? – MadScientist

+0

'main.cc' есть, но' main.h' нет. – Teofrostus

ответ

1

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

$(OBJDIR)/%.o: $(SRCDIR)/%.cc $(HDIR)/%.h 

требует как предпосылки для существования. Если ни один из них не существует, то правило не соответствует и делает, будет игнорировать его и искать другое правило. В этом случае нет другого правила, поэтому make терпит неудачу.

Если вы не всегда имеют как .cc и .h файл каждый.o файл, то вы не можете написать правила, как это.

Вместо этого, вы должны написать шаблонное правило так:

$(OBJDIR)/%.o: $(SRCDIR)/%.cc 
     $(CC) $(CFLAGS) -c -o [email protected] $< 

Тогда вам придется объявить заголовочные файлы отдельно, как это:

$(OBJDIR)/vector.o: $(HDIR)/vector.h 

и т.д. для любые заголовки. Вы можете рассмотреть возможность применения метода автоматического управления зависимостями, например this one.

Кстати, CC и CFLAGS предназначены для компиляторов C. Здесь у вас есть код на C++. По соглашению в make-файлах вы должны использовать CXX и CXXFLAGS для компиляторов C++.