makefile通用文件v2.0

TARGET=nepm


TOP_PATH=$(shell pwd)

#获取项目路径

INC=-I ${TOP_PATH}/src \
    -I $(TOP_PATH)/src/framework \
    -I $(TOP_PATH)/src/dictionary \
    -I $(TOP_PATH)/src/model \
    -I $(TOP_PATH)/src/compute \

    -I $(TOP_PATH)/src/prf

#设置头文件路径

VPATH=src:src/compute:src/dictionary:src/model:src/framework:src/prf

#设置搜索路径

SRC_PATH=$(foreach dir,$(subst :, ,$(VPATH)), $(wildcard $(dir)/*.cpp))

#获取全部cpp文件

OBJ_DIR = ./obj

#设置中间文件路径

OBJ_PATH=$(addprefix $(OBJ_DIR)/, $(subst :, , $(VPATH)))

#添加中间文件路径

OBJS:=$(addprefix $(OBJ_DIR)/, $(subst .cpp,.o, $(SRC_PATH)))

#获取中间文件*.o

MAKE_OBJECT_DIR:=$(shell mkdir -p $(OBJ_DIR) $(OBJ_PATH))

#建立源代码文件夹的镜像

DEPS:=$(subst .o,.cpp.d, $(OBJS))

#获取依赖文件的路径

CXX=g++
CXXFLAGS=-g


all : $(TARGET)
nepm : $(OBJS)
        $(CXX) -o $@ $(OBJS) $(INC) $(CXXFLAGS)
#编译最终结果,用户自定义

$(OBJS) : $(OBJ_DIR)/%.o : %.cpp $(OBJ_DIR)/%.cpp.d
        $(CXX) -o $@ -c $<  $(INC) $(CXXFLAGS)
#编译.cpp文件的统一规则

$(DEPS) : $(OBJ_DIR)/%.cpp.d : %.cpp
        echo "$@ $(OBJ_DIR)/$*.o : $< \\" > $(OBJ_DIR)/$<.d; \
        $(CXX) $< -MM  $(INC) | sed '1d' >> $(OBJ_DIR)/$<.d
#获取每个cpp文件的依赖性。并且转换为a.o a.cpp.d: a.cpp a.h的格式
#如果你用sed模式,由于s替换模式无法转意路径中的/导致依赖不正确。会产生麻烦。单本人shell有限,所以使用这个方法。如果有什么好脚本,欢迎留言改进。


sinclude $(DEPS)
#包含生成的全部.cpp.d,添加依赖关系

clean:
        rm -rf ./obj
        rm -rf $(TARGET)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值