现在的位置: 首页 > 综合 > 正文

可用的通用makefile

2017年12月04日 ⁄ 综合 ⁄ 共 1488字 ⁄ 字号 评论关闭

网上找的通用makefile不怎么好用,于是折腾了一下,在前人的基础上做了改动,可用,没有注释,看看就懂了。

# TODO:edit area
TARGET_NAME		=	MyPro
BIN_TYPE		=	dll
ifndef CFG_NAME
	CFG_NAME	=	debug
endif
ifndef SLN_DIR
	SLN_DIR		=	$(PWD)/..
endif
INT_DIR			=	$(SLN_DIR)/tmp/linux.debug/$(TARGET_NAME)
OUT_DIR			=	$(SLN_DIR)/bin/linux.debug

# -L directories
LIB_PATH	=	-Wl,-rpath=./ -L$(OUT_DIR)
# -l options
LD_LIBS		=	-l"BaseSvc" -l"jsoncpp" -l"api"
# -I directories
INC		=	-I. -I../include -I../common
# directories for finding target or cpp files
VPATH		=	.:nas:vsp
# TODO: the end edit area

SRC_PATH	=	$(foreach dir,$(subst :, ,$(VPATH)),$(wildcard $(dir)/*.cpp))
OBJ_DIR		=	$(INT_DIR)
OBJ_PATH	=	$(addprefix $(OBJ_DIR)/, $(subst :, ,$(VPATH)))
OBJS		=	$(addprefix $(OBJ_DIR)/, $(subst .cpp,.o,$(SRC_PATH)))
MAKE_OBJET_DIR	:=	$(shell mkdir -p $(OBJ_DIR) $(OBJ_PATH))

GCC		=	gcc
GPP		=	g++
GAR		=	ar
CFLAGS		+=	-c
MACROS		+=	-D_LINUX
ifeq ($(CFG_NAME), debug)
	CFLAGS	+=	-g
	MACROS	+=	-D_DEBUG
else
	CFLAGS	+= 	-O
	MACROS	+=	-DNDEBUG
endif

ifeq ($(BIN_TYPE), lib)
	BIN_GCC	=	$(GAR)
	BIN_CFLAGS += 	cr
	TARGET_PATH =	$(OUT_DIR)/lib$(TARGET_NAME).a
else
ifeq ($(BIN_TYPE), dll)
	CFLAGS 	+=	-fPIC
	BIN_GCC	=	$(GPP)
	BIN_CFLAGS = 	-shared -fPIC -o
	TARGET_PATH =	$(OUT_DIR)/$(TARGET_NAME).so
else
	BIN_GCC	=	$(GPP)
	BIN_CFLAGS =	-o
	TARGET_PATH =	$(OUT_DIR)/$(TARGET_NAME)
endif
endif


$(TARGET_NAME) : $(OBJS)
	$(BIN_GCC) $(BIN_CFLAGS) $(TARGET_PATH) $(OBJS) $(LIB_PATH) $(LD_LIBS) 

$(OBJS) : $(OBJ_DIR)/%.o : %.cpp $(OBJ_DIR)/%.cpp.d
	$(GPP) $(CFLAGS) $(MACROS) -o $@ -c $< $(INC)

# auto generate dependency
DEPS		=	$(OBJS:.o=.cpp.d)
$(DEPS) : $(OBJ_DIR)/%.cpp.d : %.cpp
	@echo -n "$@ ">$(OBJ_DIR)/$<.d;\
	$(GPP) $< -MM $(INC) >> $(OBJ_DIR)/$<.d
sinclude $(DEPS)

clean:
	@rm -rf $(OBJ_DIR)
	@rm -rf $(TARGET_PATH)

抱歉!评论已关闭.