bj_dir = $(addprefix $(OBJDIR),$(subst $(ROOTDIR),,$(CURDIR)))/
target = $(obj_dir)libnovds_delivery.a
sources = \
novds_my_delivery_service_timer.c \
novds_my_delivery.c \
novds_dcmd.c \
novds_my_delivery_reply_service.c \
novds_my_delivery_reply.c \
novds_serial.c
objects = $(addprefix $(obj_dir),$(patsubst %.c,%.o,$(sources)))
deps = $(addprefix $(obj_dir),$(patsubst %.c,%.d,$(sources)))
我知道makefile中的subst的功能,但在使用ROOTDIR两个逗号之后的这段代码中,我不知道它会做什么。
答案 0 :(得分:0)
为了清楚起见,subst
不是子集的缩写,它是替换的缩写。
$(subst $(ROOTDIR),,$(CURDIR)))
替换$(ROOTDIR)
展开的值中$(CURDIR)
扩展为的任何值的所有内容(没有任何内容(无文本))。逗号分隔参数,因此第一个逗号将$(ROOTDIR)
与下一个参数分开,第二个逗号将第二个参数(空白)与$(CURDIR)
分开。
这是对subst
的一种不好的用法,因为它会在每次出现(甚至多次)值时(即使在中间或末尾)取代$(ROOTDIR)
对于类似这样的内容,您只想删除前缀,最好使用patsubst
,例如$(patsubst $(ROOTDIR)%,%,$(CURDIR))
。