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

为了让我的项目的目录strcuture更加有组织,我想把相同模块的源文件放到单独的目录中。 所有的对象文件都应该放入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)))

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


一种实现这一点的方法是使用vpath。

另一种方式,如:

OBJ := ${SRC:%.cpp=${OBJDIR}/%.o}
链接地址: http://www.djcxy.com/p/61441.html

上一篇: Using patsubst to convert one path into another

下一篇: What do the makefile symbols $@ and $< mean?