我試圖通過使用define
作爲函數來改進我的Makefile,但是我在定義中使用Make函數時遇到了一些問題。讓我告訴你一個演示Makefile:在定義參數上應用文本轉換函數
OBJ=obj/main.o \
obj/prompt.o
define buildMessage
src="$(patsubst $(OBJ_PREFIX)/%.o,%.c,$(1))"; \
obj="$(patsubst $(OBJ_PREFIX)/%.o,%.o,$(1))"; \
echo "$$src => $$obj"
endef
$(OBJ):
$(call buildMessage, "[email protected]")
$(CC) -o [email protected] -c $(patsubst $(OBJ_PREFIX)/%.o, $(SRC_PREFIX)/%.c, [email protected]) $(CFLAGS)
所以,是的,我希望定義打印花哨的風格構建步驟,但似乎patsubst
沒有應用在定義。它會輸出
obj/main.o => obj/main.o
obj/prompt.o => obj/prompt.o
這就好像是如果patsubst被處理,但沒有改變也沒有匹配任何東西。有什麼建議麼?
謝謝您的時間
亞歷
不應該'SRC =''有SRC_PREFIX',而不是'OBJ_PREFIX'? –
無論如何,我沒有包含SRCs的var。此外,這不是真正的帖子問題:問題更多地是關於爲什麼patsubst不是它的工作 –
只是一個註釋:,這不_simplify_ makefile。你最終會發現,如果你在makefile中使用大量的宏,它們將更難閱讀,並且你將是唯一能夠支持它的人 - 從這裏的經驗來講。有時他們是有用的,但我已經學會了避免它們,除非它們提供了真正的好處。就你而言,你可以通過[靜態模式規則](https://www.gnu.org/software/make/manual/make.html#Static-Pattern)更好地實現你的目標。 – blackghost