2015-11-15 4 views
0

У меня проблема с make-файлом, который я сделал, какие продукты не исполняются и оставляет все .o в каталоге. Вот код:Makefile оставляет .o и не производит исполняемый файл

CXXFLAGS=-Wall 

    sources = tst_Robot.cpp Robot.cpp Position.cpp Plot.cpp Objet.cpp EtatRobot.cpp EtatFige.cpp EtatEnRoute.cpp EtatEnChargeFacePlot.cpp EtatEnCharge.cpp EtatAVideFacePlot.cpp EtatAVide.cpp 
    objets = $(sources:.cpp=.o) 

    %: %.o 
      $(LINK.cpp) -o [email protected] $^ 

    robot : $(objets) 

    ### 

    clean: 
      rm -f *~ *.o *.bak 

    depend: 
      makedepend $(sources) 

То, что я не понимаю, что makedepend работает, нет никаких ошибок, все .o производятся, но сама программа не производится, даже с правилом: robot: $ (objets)

Так что я не понимаю, почему это не работает, и я был бы признателен, если бы вы могли помочь мне разобрать его.

+1

'%:% .o' будет работать только для одного файла .o. –

+0

почему? Я думал, что% выбрал все файлы, заканчивающиеся на «.o» – ArkDeus

+0

Корень дерева зависимостей - это трафик, который вы «делаете». Поскольку 'make depend' будет вызывать' makedepend $ (источники) '' будет '' '$ (sources)' будет сделано, а при запуске 'make robot' должно явно создать исполняемый файл. –

ответ

1

Правила шаблона всегда относятся к одному совпадению пар файлов, например.

%.o: %.cpp 

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

source.o: source.cpp 
other.o: other.cpp 
... 

Что вам нужно разместить правило, как сделать robot где целевой робот будет сделано.

robot: $(objets) 
     $(LINK.cpp) -o [email protected] $^ 

И вы должны удалить правило шаблона, поскольку оно применимо практически ко всем. Если бы вы назвали сделать с помощью:

make robot 

Правила шаблона будет пытаться найти robot.o файл, который будет входом для создания робота.

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