我已經包含的存檔文件,我需要生成以下形式的列表,我的makefile的一個有一個變量:自動生成的makefile的先決條件(GNU-MAKE)
/libpath/mylib1/obj/mylib1.a
/libpath/mylib2/obj/mylib2.a
/libpath/mylib3/obj/mylib3.a
等。我已經建立了一個規則來創建每一個,基本上它掃描父文件夾中的.cpp文件並在/ obj子文件夾中創建.o先決條件(因此,如果/ libpath/mylib1包含foo.cpp和bar.cpp,那麼先決條件是/libpath/mylib1/obj/foo.o和/libpath/mylib1/obj/bar.o等)。我可以通過.SECONDEXPANSION創建一個.cpp文件列表,刪除.cpp文件,刪除文件夾和擴展名,後綴爲.o擴展名,然後將其作爲目標文件夾的前綴:
%.a: $$(addprefix $$(dir [email protected]),$$(addsuffix .o,$$(basename $$(notdir $$(wildcard $$(dir [email protected])../*.cpp)))))
這工作正常,但我不禁感到我正在以一種過於複雜的方式解決這個問題。有沒有更好的/更清潔的方式來做這樣的事情?
謝謝埃爾達爾。我使用的是addsiffix,因爲實際上有四種不同的擴展名我試圖過濾出來,我需要仔細看看patsubst是否可以處理。乾杯! – 2012-02-02 01:20:48
@Mark,不客氣! – 2012-02-02 08:11:58