C 通过Makefile在特定目录中创建对象文件

C 通过Makefile在特定目录中创建对象文件,c,makefile,C,Makefile,虽然这样做非常有效: object.o: $(SRCDIR)object.c $(CC) -c $(CFLAGS) $(INCLUDEDIR) $< mv object.o $(OBJDIR) object.o:$(SRCDIR)object.c $(CC)-c$(CFLAGS)$(包括IR)$< mv object.o$(OBJDIR) 目标是在创建目录时自动在目录中创建.o文件。不像先创造然后移动 我这样做: $(OBJDIR)/object.o: $(SRCD

虽然这样做非常有效:

object.o:   $(SRCDIR)object.c
    $(CC) -c $(CFLAGS) $(INCLUDEDIR) $<
    mv object.o $(OBJDIR)
object.o:$(SRCDIR)object.c
$(CC)-c$(CFLAGS)$(包括IR)$<
mv object.o$(OBJDIR)
目标是在创建目录时自动在目录中创建.o文件。不像先创造然后移动

我这样做:

$(OBJDIR)/object.o: $(SRCDIR)object.c
    $(CC) -c $(CFLAGS) $(INCLUDEDIR) $<
$(OBJDIR)/object.o:$(SRCDIR)object.c
$(CC)-c$(CFLAGS)$(包括IR)$<
这一个输出:
make:**没有规则将目标设置为“object.o”,这是“all”所需要的。停止。

任何方向,如何实现它?

解决了它

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

我想你在找这样的东西:

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

$(OBJS) : $(SRCDIR)/%.o : $(OBJDIR)/%.c
    @echo "$< => $@"
    @$(CC) -c -o $@ $(CFLAGS) $(INCLUDEDIR) $<
$(OBJS)=$(patsubst$(SRCS),$(SRCDIR)/%.c,$(OBJDIR)/%.o)
$(OBJS):$(SRCDIR)/%.o:$(OBJDIR)/%.c
@回显“$<=>$@”
@$(CC)-c-o$@$(CFLAGS)$(包括IR)$<

这是一个使用特定模式构建对象的方法。请注意,我假设您将尾部的
/
移出了
$(SRCDIR)
(因为这样更干净)

SRCDIR
是否包含
/
?因为
OBJDIR
似乎没有得到它,因为您在末尾添加了它。@kaldoran yes SRCDIR:=src/您需要发布生成文件,而不仅仅是位。@MikeKinghan感谢您的关注。解决了。并在这里写了答案,这是一个永远不会创造目标的配方。这是错误的解决方案。它通过创造你尚未发现的其他事物来解决你所知道的问题。@MikeKinghan你能详细说明一下吗?我只需要创建.o文件。我后来创建了目标。链接我的Makefile片段中未给出的所有.o文件。@MikeKinghan ie.Executive:$(patsubst%,$(OBJDIR)/%,$(OBJ))$(CC)$(CFLAGS)$(INCLUDEDIR)-o$@$^希望如此clarifies@MikeKinghan标题也是“通过Makefile在特定目录中创建对象文件”因此,我面临的问题是只将.o文件构建到特定的目录中。根据SO的指导方针,我需要针对具体问题。因此,考虑只发布问题区域。不过,正如您所建议的,我会考虑更详细的问题。此外,您可能还想查找创建
$(OBJDIR)
的订单依赖项。是的,我已经搬出了/并且以后还使用了静态模式规则。谢谢你的关心。