2017-04-19 58 views
0

创建特定的目录对象文件虽然这完美的作品:通过的Makefile

object.o: $(SRCDIR)object.c 
    $(CC) -c $(CFLAGS) $(INCLUDEDIR) $< 
    mv object.o $(OBJDIR) 

的目标是自动创建的目录里面的.o文件在创建它。即。不喜欢先创建然后移动。

我这样做:

$(OBJDIR)/object.o: $(SRCDIR)object.c 
    $(CC) -c $(CFLAGS) $(INCLUDEDIR) $< 

这一个输出:make: *** No rule to make target 'object.o', needed by 'all'. Stop.

任何方向,如何实现这一目标?

+0

SRCDIR包含'/'吗?由于'OBJDIR'看起来不像它,因为你在最后添加它。 – kaldoran

+0

@kaldoran是 SRCDIR:= src/ –

+1

您需要发布makefile,而不仅仅是位。 –

回答

0

解决了它。

object.o: $(SRCDIR)object.c 
    $(CC) -c -o $(OBJDIR)/object.o $(CFLAGS) $(INCLUDEDIR) $^ 
+0

这是一个永远不会创建其目标的配方。这是错误的解决方案。它通过创建你还未发现的其他人来解决你所了解的问题。 –

+0

@MikeKinghan请你详细说明一下吗?我只需要创建.o文件。我后来创建了目标。链接所有.o文件,这些文件不在我的Makefile的片段中给出。 –

+0

@MikeKinghan ie。 可执行文件:\t $(patsubst%,$(OBJDIR)/%,$(OBJ)) \t $(CC)$(CFLAGS)$(INCLUDEDIR)-o $ @ $^ 希望这澄清 –

1

我认为你在寻找这样的事情:

$(OBJS) = $(patsubst $(SRCS),$(SRCDIR)/%.c,$(OBJDIR)/%.o) 

$(OBJS) : $(SRCDIR)/%.o : $(OBJDIR)/%.c 
    @echo "$< => [email protected]" 
    @$(CC) -c -o [email protected] $(CFLAGS) $(INCLUDEDIR) $< 

这是一个static pattern rule它说使用特定的模式来构建你的对象。请注意,我假设你将尾随/移出$(SRCDIR)(因为它更清洁)。

+0

此外,您可能只想查看仅用于创建'$(OBJDIR)'的订单依赖项,以及 – blackghost

+0

yup,我已经移出/并且稍后还使用了静态模式规则。不过谢谢你的关注。 –