#可执行文件的名字
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)
makefile template
最新推荐文章于 2023-09-17 22:37:54 发布