0

这是生成文件:

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)

请告诉我上述语句的含义,最好弄清楚上述语句省略了什么。谢谢。

4

1 回答 1

1

您可以在 GNU make 手册中查找它。以上等价于写作$(CPPSRCS:%.cc=%.o)(同样适用CSRCS)。在这两个中,它遍历变量中的每个单词,如果它与等式的左侧匹配,则将其替换为右侧。因此,如果一个单词与模式匹配%.cc(where %to make 匹配任何字符序列),则将其替换为%.o(where%与原始字符相同)。您看到的表格是一种特殊情况,您可以省略%if 它是双方的第一件事。

因此,给定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

于 2013-10-17T17:50:22.870 回答