我试图通过使用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