这是makefile:
TOP=../..
DIRNAME=base_class/string
H = regexp.h regmagic.h string_version.h
CSRCS = regerror.c regsub.c EST_strcasecmp.c
TSRCS =
CPPSRCS = EST_String.cc EST_Regex.cc EST_Chunk.cc regexp.cc
LOCAL_DEFAULT_LIBRARY = eststring
SRCS = $(CPPSRCS) $(CSRCS)
OBJS = $(CPPSRCS:.cc=.o) $(CSRCS:.c=.o)
FILES = $(SRCS) $(TSRCS) $(H) Makefile
LOCAL_INCLUDES=-I.
ALL = .buildlibs
include $(TOP)/config/common_make_rules
现在我知道这部分是可变的
TOP=../..
DIRNAME=base_class/string
H = regexp.h regmagic.h string_version.h
CSRCS = regerror.c regsub.c EST_strcasecmp.c
TSRCS =
CPPSRCS = EST_String.cc EST_Regex.cc EST_Chunk.cc regexp.cc
LOCAL_DEFAULT_LIBRARY = eststring
SRCS = $(CPPSRCS) $(CSRCS)
我不知道的是:
OBJS = $(CPPSRCS:.cc=.o) $(CSRCS:.c=.o)
请告诉我上述陈述的含义,最好是弄清楚上面的陈述省略了什么。谢谢。
答案 0 :(得分:1)
您可以在GNU make手册中查看。上述内容相当于编写$(CPPSRCS:%.cc=%.o)
(并且CSRCS
同上)。在这两个中,它遍历变量中的每个单词,如果它与相等的左侧匹配,则它被右侧替换。因此,如果一个单词匹配模式%.cc
(其中%
匹配任何字符序列),则将其替换为%.o
(其中%
与原版的)。您看到的表单是一种特殊情况,如果它是双方的第一件事,您可以省略%
。
因此,在CPPSRCS = EST_String.cc EST_Regex.cc EST_Chunk.cc regexp.cc
的情况下,$(CPPSRCS:.cc=.o)
会扩展为EST_String.o EST_Regex.o EST_Chunk.o regexp.o
。