TARGET=nepm
-I $(TOP_PATH)/src/framework \
-I $(TOP_PATH)/src/dictionary \
-I $(TOP_PATH)/src/model \
-I $(TOP_PATH)/src/compute \
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)
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)