【问题标题】:Makefile for automatic placement of object and dependency file in separate folderMakefile 用于在单独的文件夹中自动放置对象和依赖文件
【发布时间】:2017-04-23 13:59:54
【问题描述】:

我想将编译器的目标文件放在与源文件不同的文件夹中。当使用与我的源代码构建方式相同的文件夹结构时,我让它工作了,但这不是我正在寻找的解决方案。

我更喜欢以下内容:

来源:

src/main.cpp
src/myClass/myClass.cpp

对象:

obj/main.o
obj/myClass.o

依赖关系

dep/main.d
dep/main.d

到目前为止,我拥有的是以下内容

变量

$(OBJLIST)=obj/main.o obj/myClass.o
$(SRCDIR)=src
$(OBJDIR)=obj

链接器

$(PROJECT): $(OBJLIST)
    $(CXX) $(OBJLIST) $(LIBS) -o $@

编译器,这是我的问题

这是有效的

$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
    @mkdir -p $(DEPDIR) $(OBJDIR)
    $(CXX) $(CPPFLAGS) -c $< -o $@
    $(CXX) $(CPPFLAGS) -MM -MT 1_obj/main.o 0_src/main.cpp -o 2_dep/main.dep
$(OBJDIR)/%.o: $(SRCDIR)/myClass/%.cpp
    @mkdir -p $(DEPDIR) $(OBJDIR)
    $(CXX) $(CPPFLAGS) -c $< -o $@
    $(CXX) $(CPPFLAGS) -MM -MT 1_obj/myClass.o 0_src/myClass/myClass.cpp -o 2_dep/myClass.dep

我还有一个名为 SRCDIRS 的对象,其中包含:

SRCDIRS
    ./
    ./myClass

所以我希望我可以将编译定义合并到类似的东西

$(OBJDIR)/%.o: $(SRCDIR)/$(SRCDIRS)/%.cpp
    @mkdir -p $(DEPDIR) $(OBJDIR)
    $(CXX) $(CPPFLAGS) -c $< -o $@
    $(CXX) $(CPPFLAGS) -MM -MT $@ @< -o $(DEPDIR)/$(notdir $(basename $<).dep)

我希望这可以概括这两种可能性,但不知何故,它接缝 它不会遍历 SRCDIRS 并检查任何匹配项。

【问题讨论】:

  • 常用的方法是在makefile中包含.d文件。
  • 这不是我的问题,我想知道如何自动将 o 文件放在不同的文件夹中。但无需重建 .cpp 文件的整个文件夹结构。因此,从所有文件夹和子文件夹中获取所有源文件,并在编译期间将 o 文件放在一个文件夹中。

标签: c++ object makefile dependencies directory


【解决方案1】:

您可以使用vpath 完成此操作。请注意,VPATH只能用于查找源文件。

所以,是这样的:

VPATH = $(SRCDIRS)

$(OBJDIR)/%.o : %.c
        ...

就是你所需要的。

【讨论】:

  • 非常感谢。这完全解决了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
相关资源
最近更新 更多