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]
什麼?
謝謝,這是有道理的! – Thomas
非常有幫助的例子。 – zach