使用patsubst将一个路径转换为另一个路径

时间:2013-04-19 07:49:46

标签: c++ c makefile pattern-matching

为了使我的项目的目录strcuture更有条理,我想将相同模块的sourcefiles放入单独的目录中。所有对象文件都应放入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,即将src/propertyfile/propertyfile.cpp转换为obj/propertyfile/propertyfile.o,但我想要的是obj/propertyfile.o

指向这些模式如何工作以及它接受的参数的一个很好的解释的指针也是有帮助的。

更新:

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

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

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

1 个答案:

答案 0 :(得分:0)

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

另一种方式,如:

OBJ := ${SRC:%.cpp=${OBJDIR}/%.o}