语法
- wildcard : 扩展通配符
- notdir : 去除路径
- patsubst :替换通配符
patsubst函数
这是个模式替换函数
格式:$(patsubst <pattern>,<replacement>,<text> )
名称:模式字符串替换函数——patsubst。
功能:查找<text>中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式<pattern>,如果匹 配的话,则以<replacement>替换。这里,<pattern>可以包括通配符“%”,表示任意长度的字串。如 果<replacement>中也包含“%”,那么,<replacement>中的这个“%”将 是<pattern>中的那个“%”所代表的字串。(可以用“\”来转义,以“%”来表示真实含义的“%”字符)
返回:函数返回被替换过后的字符串。
简单实例
- TEST目录树形图
TEST/
├── inc
│ ├── a.h
│ ├── b.h
│ └── c.h
├── lib
│ └── test.a
├── log
├── Makefile
└── src
├── a.c
├── b.cpp
└── c.cc
- 针对TEST简单Makefile
TARGET = test
path := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
SRC_PATH = $(path)/src
OBJ_PATH = $(path)/obj
INC_PATH = -I$(path)/inc
LIB_LINK = -L$(path)/lib
SOURCE=$(wildcard $(SRC_PATH)/*.c) $(wildcard $(SRC_PATH)/*.cpp) $(wildcard $(SRC_PATH)/*.cc)
DIR=$(notdir $(SOURCE))
OBJS= $(patsubst %.c,$(OBJ_PATH)/%.o,$(patsubst %.cpp,$(OBJ_PATH)/%.o,$(patsubst %.cc, $(OBJ_PATH)/%.o, $(DIR))))
CPPFLAGS = -m32 -g -Wall -std=c++11
CC = g++
LOCAL_LIB = -ltest
LIB = -lpthread
all: desc $(TARGET)
desc:
@echo "=======================================SOURCE========================================================"
@echo $(SOURCE)
@echo "========================================DIR=========================================================="
@echo $(DIR)
@echo "=======================================OBJS=========================================================="
@echo $(OBJS)
@echo "======================================================================================================"
$(TARGET) : $(OBJS)
$(CC) ${CPPFLAGS} -o $@ $^ $(LIB_LINK) $(LOCAL_LIB) $(LIB)
$(OBJ_PATH)/%.o: $(SRC_PATH)/%.c
${CC} -c ${CPPFLAGS} $(INC_PATH) -o $@ $<
$(OBJ_PATH)/%.o: $(SRC_PATH)/%.cpp
${CC} -c ${CPPFLAGS} $(INC_PATH) -o $@ $<
$(OBJ_PATH)/%.o: $(SRC_PATH)/%.cc
${CC} -c ${CPPFLAGS} $(INC_PATH) -o $@ $<
.PHONY : clean
clean :
rm $(TARGET) $(OBJS)
网友评论