【发布时间】: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