通用Makefile

Include guide

CC = g++
CPP = g++
MAKE = make

CFLAGS = -m64

CURRENT_DIR = .
PARENT_DIR = ..
#third path
THIRD_DIR = $(CURRENT_DIR)/Third
SRC_PATH = $(CURRENT_DIR)/src
##shared lib path
PROJ_LIB_DIR = $(CURRENT_DIR)/libs/Linux_x64 
##static lib path
PROJ_SLIB_DIR = $(CURRENT_DIR)/libs/Linux_x64
##obj path
PROJ_OBJ_DIR = $(CURRENT_DIR)/.obj
##target path
PROJ_DIR = $(CURRENT_DIR)/.bin/Linux_x64
##exe path
PROJ_EXE_DIR = $(PARENT_DIR)/bin/Linux_x64

TARGET_PROJ     = $(TARGET_DIR)/$(TARGET_NAME) 
PROJ_BIN_NAME   = $(PROJ_BIN_DIR)/$(TARGET_NAME) 


LIBS = 
CFLAGS =	-pthread -std=c++11
SOFLAGS = 
LDLIBS = -lm -ldl -lpthread -lrt

CPPFLAGS := $(CFLAGS) $(SOFLAGS)

LDFLAGS := $(LDFLAGS) $(SOFLAGS) -Wl,-Bsymbolic -Wl,--enable-new-dtags -Wl,--hash-style=sysv -Wl,-rpath,./

VPATH += $(SRC_DIR)

Details

include ./Rules.make
##target 
TARGET_NAME     = MQAPP
TARGET_DIR      = ../out
PROJ_BIN_DIR    = ../out

#inc dir 
INC_DIR = ../include \
               ../include/amqpcpp  \
			   ../include/event	\
			   ../include/event/event2
			   
# src dir
SRC_DIR = .

PROJ_SRCS = 			   		   	   
##static lib(no need)
PROJ_SLIBS =  
##shared lib
PROJ_LIBS := $(LIBS) amqpcpp event

##obj path
OBJ_DIR := $(PROJ_OBJ_DIR)
#set so compile options
SOFLAGS := $(SOFLAGS)

#OPTS = -shared
OPTS = 

LDLIBS := $(LDLIBS) $(patsubst %, -l%, $(PROJ_LIBS)) $(patsubst %, -L%, $(PROJ_LIB_DIR))
LD_STATIC_LIB := $(LD_STATIC_LIB) $(patsubst %, -l%, $(PROJ_SLIBS)) $(patsubst %, -L%, $(PROJ_SLIB_DIR))

CFLAGS := $(CFLAGS) $(SOFLAGS) $(patsubst %, -I%, $(INC_DIR))

MAKE_OBJ_DIR := $(shell if [ ! -d $(OBJ_DIR) ]; then mkdir -p $(OBJ_DIR) ; fi )
MAKE_OBJ_SUBDIR := $(shell for sub_dir in $(VPATH) $(patsubst %/, %, $(dir $(PROJ_SRCS))); do if [ ! -d $(OBJ_DIR)/$$sub_dir ]; then mkdir -p $(OBJ_DIR)/$$sub_dir; fi ; done; )

MAKE_TARGET_DIR := $(shell if [ ! -d $(TARGET_DIR) ]; then mkdir -p $(TARGET_DIR) ; fi )
MAKE_BIN_DIR := $(shell if [ ! -d $(PROJ_BIN_DIR) ]; then mkdir -p $(PROJ_BIN_DIR) ; fi )

SOURCES := $(foreach dir, $(VPATH), $(wildcard $(dir)/*)) $(PROJ_SRCS)

C_SRCS  := $(filter %.c, $(SOURCES))
CPP_SRCS := $(filter %.cpp, $(SOURCES))

SRCS := $(C_SRCS) $(CPP_SRCS)
OBJS := $(patsubst %, $(OBJ_DIR)/%, $(patsubst %.c, %.o, $(patsubst %.cpp, %.o, $(SRCS))))
$(OBJ_DIR)/%.o:%.c
	$(CC)  -c  $(CFLAGS) $< -o $@
$(OBJ_DIR)/%.o:%.cpp
	$(CPP) -c $(CPPFLAGS) $< -o $@

all: $(OBJS)	
	$(CC)  $(OPTS) $(OBJS) $(LDFLAGS) $(LDLIBS) $(LD_STATIC_LIB) -o $(TARGET_PROJ)   
	#cp  $(TARGET_PROJ)  $(PROJ_BIN_NAME) -rf
	
clean:
	-rm -f $(TARGET_PROJ) $(OBJS) $(PROJ_BIN_NAME)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值