有谁能解释我这个makefile?

时间:2013-10-17 17:40:24

标签: makefile

这是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)

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

1 个答案:

答案 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