美文网首页
2020-07-16 makefile 简单语法

2020-07-16 makefile 简单语法

作者: JOE_30f2 | 来源:发表于2020-07-16 09:15 被阅读0次

    语法

    • 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)
    

    相关文章

      网友评论

          本文标题:2020-07-16 makefile 简单语法

          本文链接:https://www.haomeiwen.com/subject/mzvuhktx.html