makefile问题中的VPATH

makefile问题中的VPATH,makefile,Makefile,我有一个关于VPATH的问题。 我正在使用make文件和VPATH变量。基本上,我从几个不同的地方(由VPATH指定)获取源文件,并尝试使用所需的.o文件列表将它们编译到另一个目录($CURDIR/OBJ/)中 在使用VPATH时,我是否可以在当前目录以外的任何其他目录中创建.o???好的,是的,但你的问题不太正确 Make擅长在那里找到东西,并在这里使用它们来制作东西,但不是相反。VPATH和VPATH告诉make在哪里查找它需要的东西,但是没有相应的指令将它制作的东西放在当前目录之外的其他地

我有一个关于VPATH的问题。 我正在使用make文件和VPATH变量。基本上,我从几个不同的地方(由VPATH指定)获取源文件,并尝试使用所需的.o文件列表将它们编译到另一个目录($CURDIR/OBJ/)中


在使用VPATH时,我是否可以在当前目录以外的任何其他目录中创建.o???

好的,是的,但你的问题不太正确

Make擅长在那里找到东西,并在这里使用它们来制作东西,但不是相反。VPATH和VPATH告诉make在哪里查找它需要的东西,但是没有相应的指令将它制作的东西放在当前目录之外的其他地方

如果希望对象文件(OBJECTS=ant.obee.o)进入另一个目录,如$(OBJDIR),基本上有三种方法

  • 在此处建造并手动移动(这一次几乎肯定会给您带来麻烦): $(对象):%.o:%.c gcc-c$<-o$@ mv$@$(OBJDIR) 或者同等地,去那里建造它们: $(OBJECTS): %.o: %.c cd $(OBJDIR) ; gcc -c $< -o $@ $(对象):%.o:%.c cd$(OBJDIR);gcc-c$<-o$@
  • 指定路径并在适当的位置构建它们(对于初学者来说可能是最好的): FULLOBJECTS=$(addprefix$(OBJDIR)/,$(OBJECTS)) $(FULLOBJECTS):$(OBJDIR)/%.o:%.c gcc-c$<-o$@
  • 呼叫Make there(功能强大,但非常棘手): $(对象): $(MAKE)-C$(OBJDIR)$@
    嗯,是的,但你的问题不太对

    Make擅长在那里找到东西,并在这里使用它们来制作东西,但不是相反。VPATH和VPATH告诉make在哪里查找它需要的东西,但是没有相应的指令将它制作的东西放在当前目录之外的其他地方

    如果希望对象文件(OBJECTS=ant.obee.o)进入另一个目录,如$(OBJDIR),基本上有三种方法

  • 在此处建造并手动移动(这一次几乎肯定会给您带来麻烦): $(对象):%.o:%.c gcc-c$<-o$@ mv$@$(OBJDIR) 或者同等地,去那里建造它们: $(OBJECTS): %.o: %.c cd $(OBJDIR) ; gcc -c $< -o $@ $(对象):%.o:%.c cd$(OBJDIR);gcc-c$<-o$@
  • 指定路径并在适当的位置构建它们(对于初学者来说可能是最好的): FULLOBJECTS=$(addprefix$(OBJDIR)/,$(OBJECTS)) $(FULLOBJECTS):$(OBJDIR)/%.o:%.c gcc-c$<-o$@
  • 呼叫Make there(功能强大,但非常棘手): $(对象): $(MAKE)-C$(OBJDIR)$@
    我在试你的第二个建议。然而,我无法让它发挥作用。我将如何使用FULLOBJECTS?”生成FULLOBJECTS?啊,我发现我在回答中犯了一个错误:目标应该是
    $(FULLOBJECTS)
    ,而不是
    FULLOBJECTS
    。我会纠正的。如果你仍然有问题,发布你的makefile。我正在尝试你的第二个建议。然而,我无法让它发挥作用。我将如何使用FULLOBJECTS?”生成FULLOBJECTS?啊,我发现我在回答中犯了一个错误:目标应该是
    $(FULLOBJECTS)
    ,而不是
    FULLOBJECTS
    。我会纠正的。如果仍然有问题,请发布makefile。 FULLOBJECTS = $(addprefix $(OBJDIR)/,$(OBJECTS)) $(FULLOBJECTS): $(OBJDIR)/%.o: %.c gcc -c $< -o $@ $(OBJECTS): $(MAKE) -C $(OBJDIR) $@