2012-09-20 35 views
0

我有一个名为code/的文件夹,它有几个.cpp文件,都需要编译到它们的.o版本并放入object/文件夹中。我有一些问题,确定正确的变量名...如何将值附加到makefile中变量的开头?

首先,我定义的一些路径:

OBJPATH=object#All compiled .o files need to be placed here. 
CODEPATH=code#All .cpp and .hpp header files reside here. 

然后,我尝试提取所有从代码路径文件名的:

SRC=$(wildcard $(CODEPATH)/*.cpp) 

然后,SRC的值为code/A.cpp code/B.cpp code/C.cpp。我想摆脱code前缀,最后用$(OBJPATH)代替它,它的计算结果为object/。我最初尝试这样的:

TMP=$(SRC:.cpp=.o) 
OBJ=$(TMP:$(CODEPATH)=$(OBJPATH)) 

但是,事实证明,这并不工作,因为$(var:a=b)功能将只在变量结束替换字符串,而不是在任意点。

如果我能找到一种方法来摆脱code/前缀,我的问题就会消失,那么我该怎么做呢?

回答

1

您可以使用模式匹配替换(这可能不是GNU进行调用,它们虽然):

OBJ=$(TMP:$(CODEPATH)/%=$(OBJPATH)/%) 

你也应该能够做到一步到位,没有中间TMP

OBJ=$(SRC:$(CODEPATH)/%.cpp=$(OBJPATH)/%.o)