2015-11-15 85 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文件,该文件将建立机器人输入。