2012-12-07 74 views
1

我有一個文件夾結構,其中我的所有源文件都在./src/中,並且我的所有對象文件都在./obj/中(具有相同的內部目錄結構,使用路徑替換鏡像)。我創建了以下makefile:Makefile文件字符串替換依賴不起作用

$(EXECUTABLE): $(OBJECTS) 
    @echo Linking $(EXECUTABLE)... 
    $(CXX) $(LDLIBS) $(OBJECTS) -o $(EXECUTABLE) 

%.o: $(subst o,cpp,$(subst obj/,src/,[email protected])) 
    @echo Building [email protected] 
    $(CXX) $(CPPFLAGS) -c $(subst o,cpp,$(subst obj/,src/,[email protected])) -o [email protected] 

哪個不行!即使源文件實際上比目標文件更早,Make也會一直聲稱目標文件是最新的。在另一方面,如果我這樣做:

obj/main.o: src/main.cpp 
    @echo Building [email protected] 
    $(CXX) $(CPPFLAGS) -c src/main.cpp -o [email protected] 

對於每一個源文件,它完美的作品。我檢查了兩個subst給出了相同的結果(obj/main.o成爲src/main.cpp,如預期的那樣)。但由於某種原因,Make不接受依賴關係。

這給了我很多的悲傷,有人可以解釋我要去哪裏嗎?我不明白髮生了什麼事情,我認爲我的替代將同樣工作,因爲它提供了相同的輸出。我不允許在依賴關係中使用subst[email protected]什麼?

回答