假設像文件結構如下:匹配的模式作爲參數傳遞給Makefile中起作用的依賴
a/a1.cpp
a/a2.cpp
b/b1.cpp
b/b2.cpp
Makefile
我的目標是要建立兩個目標文件A0和B0其中AO取決於a1.cpp和a2.cpp和bo取決於b1.cpp和b2.cpp。但是,事實證明,我無法在Makefile中解決這個問題。這裏是我的嘗試:
SOURCES := a/a1.cpp a/a2.cpp b/b1.cpp b/b2.cpp
TARGETS := a.o b.o
RELEVANT = $(filter $(1)/%.cpp,$(SOURCES))
$(TARGETS): %.o: $(call RELEVANT,%)
@echo $^
我本來期望,使用呼叫功能%在由A或B以及相關的回報所需的依賴所取代。然而,$ ^只是返回一個空字符串,表明顯然過濾器函數沒有按預期工作。 基本上,這個問題似乎是由模式匹配規則之前評估函數引起的,如下所述:Makefile, Regex and multiple dependencies。不過,我無法將給出的解決方案轉移到我的案例中。此外,它看起來有點駭人,我希望有一個更清晰的解決方案,不需要bash功能。
有人能想出解決這個問題的辦法嗎?
謝謝!這工作完美。我完全不知道二次擴張。關於將多個cpp文件編譯成一個對象的問題:你說得對,這沒什麼意義。其實,這是我過分簡化問題的結果。我最初的問題是基於來自不同子目錄的對象文件更新不同的動態庫。 – Timo