1

为了使我的项目的目录结构更有条理,我想将相同模块的源文件放入单独的目录中。所有对象文件都应放入obj目录中。我也不想在 obj 目录中复制源代码树,所以我正在寻找一种方法来从源文件中删除目录部分以使其进入 obj 路径。

所以这是当前版本,它要求 obj 目录与源目录具有相同的布局。

OBJDIR:= obj
SRCDIR:= src

SRC := propertyfile/propertyfile.cpp otheritems/file.cpp otheritmes/subtree/bla.cpp
OBJ := $(patsubst %.cpp, $(OBJDIR)/%.o, $(SRC))

更清楚地说:我的消息来源位于

src/propertyfile/*
src/otheritems/*
src/otheritmes/subtree/*

等等。

objfiles 应该都在 obj 中,没有中间目录。使用上面的 patsubst,它只是将 src 部分替换为 obj 使 iesrc/propertyfile/propertyfile.cpp变成obj/propertyfile/propertyfile.o但我想要的是obj/propertyfile.o

一个关于这些模式如何工作以及它接受哪些参数的良好解释的指针也会有所帮助。

更新:

到目前为止,我通过使用以下行取得了一些进展:

OBJ :=      $(addprefix obj/,$(notdir $(SRC:.cpp=.o)))

但是现在构建规则不再起作用,因为名称不匹配,所以我需要一个也适用于构建规则的模式。

4

1 回答 1

0

实现此目的的一种方法是使用vpath

另一种方式,例如:

OBJ := ${SRC:%.cpp=${OBJDIR}/%.o}
于 2013-04-19T08:55:17.130 回答