2012-09-20 38 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)