2015-11-15 83 views
0

我有一個我製作的makefile的問題,哪些產品沒有可執行文件並在目錄中保留所有.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產生,但程序本身並不生產,甚至與規則: 機器人:$(objets)

所以我不明白爲什麼它不起作用,我將不勝感激,如果你能幫我把它搞砸。

+1

'%:%.o'只適用於單個'.o'文件。 –

+0

爲什麼?我認爲%選擇了以「.o」結尾的所有文件。 – ArkDeus

+0

依賴關係樹的根目錄就是你製作的目錄。由於'make depend'會調用'makedepend $(sources)',因此只會生成$(sources)',而'make robot'顯然會創建可執行文件。 –

回答

1

模式規則總是針對一對文件的一對一匹配,例如,

%.o: %.cpp 

您可能會認爲模式規則只是爲每對編寫單獨規則的快捷方式。 上述規則將匹配以下對:

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

你需要的是把規則如何使robot其中機器人目標是要進行。

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

而你必須刪除模式規則,因爲它適用於幾乎所有的東西。 如果您將調用用make:

make robot 

模式規則將嘗試找到一個robot.o文件,該文件將建立機器人輸入。