繁体   English   中英

用于将对象和依赖文件自动放置在单独文件夹中的Makefile

[英]Makefile for automatic placement of object and dependency file in separate folder

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

我希望以下是:

资料来源:

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中循环并检查是否匹配。

您可以使用vpath做到这一点。 请注意,VPATH 可用于查找源文件。

因此,如下所示:

VPATH = $(SRCDIRS)

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

是你所需要的全部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM