makefile template

#可执行文件的名字
TARGET_NAME := APP
TARGET      := ./$(TARGET_NAME)
#编译链
CC      := gcc
CXX     := g++
#构建参数 -std=c++11 -fPIC
CFLAGS    += -g -Wall 
CXXFLAGS  := -g -Wall
CCOBJFLAG := $(CXXFLAGS) -c
#链接库
LDFLAGS := -Wl,--rpath=.:./lib/ -lpthread -lm -lrt -lstdc++
LDFLAGS += -L./3rdparty/lib -ltest
#编译时间和git提交id
BUILD_INFO_FLAGS=-DAPP_BUILD_TIME="$(shell date +"%Y-%m-%d %H:%M:%S")" -DAPP_COMMIT_ID="$(shell git log | grep  commit |head -n 1 | awk {'print $2'})"

#头文件包含路径(递归查找)
INCLUDE      := $(shell find ./ -name *.h   | xargs dirname | sort -u)
INCLUDE_HPP  += $(shell find ./ -name *.hpp | xargs dirname | sort -u)
INCLUDE_PATH =  $(patsubst ./%, -I./%, $(INCLUDE) $(INCLUDE_HPP) )
#$(warning "INCLUDE = $(INCLUDE_PATH)")
#$(warning "CFLAGS = $(origin CFLAGS)")

#所有源码文件
CXX_SRC := $(shell find ./ -name "*.cpp")
C_SRC   := $(shell find ./ -name "*.c")
SRC     := $(CXX_SRC) $(C_SRC)
#目标文件名(*.o)
OBJ := $(patsubst %.cpp, %.o, $(CXX_SRC))
OBJ += $(patsubst %.c,   %.o, $(C_SRC))
#$(warning "OBJ = $(OBJ)")
#目标规则与依赖关系  $<:*.cpp $@=*.o
%.o: %.cpp
	$(CXX) $(CCOBJFLAG) $(INCLUDE_PATH) $< -o $@

%.o: %.c
	$(CC)  $(CCOBJFLAG) $(INCLUDE_PATH) $< -o $@

.PHONY: all clean
default: all
all: $(TARGET)
	@echo APP builld success...............................................
$(TARGET): $(OBJ)
	$(CXX) $(CXXFLAGS) $(BUILD_INFO_FLAGS) $(OBJ) $(LDFLAGS) -o $@

CLEAN_LIST := $(TARGET)
CLEAN_LIST += $(OBJ)

clean:
	-$(RM) $(CLEAN_LIST)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值