通用的Makefile
################################################################
#自动将src目录下所有的cpp、cc和c文件编译,生成所有.o文件保存在bin/objs下
#自动将lib下所有的静态库和动态库文件链接到程序里,SYSTEM_LIBS是系统自带的库,比如rt,pthread
#Created by lfh 2015-02-10
#################################################################
PROJECT_TOP_DIR := $(shell pwd)
PROJECT_BIN_DIR := $(PROJECT_TOP_DIR)/bin
PROJECT_SRC_DIR := $(PROJECT_TOP_DIR)/src
PROJECT_INC_DIR := $(PROJECT_TOP_DIR)/inc
PROJECT_LIB_DIR := $(PROJECT_TOP_DIR)/lib
PROJECT_OBJ_DIR := $(PROJECT_TOP_DIR)/objs
COMPILER_DIR := arm-hisiv100nptl-linux-
DATE := $(shell date '+%y-%m-%d-%H')
CXX := $(COMPILER_DIR)g++
STRIP := $(COMPILER_DIR)strip
TARGETS := shopalarm
CXXFLAGS := -Wall -I$(PROJECT_INC_DIR)
LDFLAG := -L$(PROJECT_LIB_DIR)
SRCS :=$(wildcard $(PROJECT_SRC_DIR)/*.cpp $(PROJECT_SRC_DIR)/*.cc $(PROJECT_SRC_DIR)/*.c)
DIR := $(notdir $(SRCS))
PROJECT_OBJ_TEMP := $(patsubst %.cpp,%.o,$(DIR))
PROJECT_OBJ := $(patsubst %.cc,%.o,$(PROJECT_OBJ_TEMP))
PROJECT_ALL_OBJS := $(addprefix $(PROJECT_OBJ_DIR)/, $(PROJECT_OBJ))
LIBRARYS := $(wildcard $(PROJECT_LIB_DIR)/*.so $(PROJECT_LIB_DIR)/*.a)
LIBS_FILE := $(notdir $(LIBRARYS))
LIBS_NAME := $(basename $(LIBS_FILE))
LIBS := $(patsubst lib%,-l%,$(LIBS_NAME))
SYSTEM_LIBS := -lrt
all:$(TARGETS)
$(TARGETS): $(PROJECT_ALL_OBJS)
$(CXX) $(CXXFLAGS) $(LDFLAG) $(LIBS) $(SYSTEM_LIBS) -o $(PROJECT_BIN_DIR)/$@ $^
$(STRIP) $(PROJECT_BIN_DIR)/$@
@cp -f $(PROJECT_BIN_DIR)/$(TARGETS) $(PROJECT_BIN_DIR)/$(TARGETS)-$(DATE)
@echo "-----------------------------------------------------------------------------"
@echo "Build Completed for $(PROJECT_BIN_DIR)/$(TARGETS): $(TARGETS) build"
@echo "-----------------------------------------------------------------------------"
$(PROJECT_OBJ_DIR)/%.o: $(PROJECT_SRC_DIR)/%.cc
$(CXX) -c $(CXXFLAGS) -o $@ $<
$(PROJECT_OBJ_DIR)/%.o: $(PROJECT_SRC_DIR)/%.cpp
$(CXX) -c $(CXXFLAGS) -o $@ $<
$(PROJECT_OBJ_DIR)/%.o: $(PROJECT_SRC_DIR)/%.c
$(CXX) -c $(CXXFLAGS) -o $@ $<
clean:
rm -fr $(PROJECT_OBJ_DIR)/*.o
rm -fr $(PROJECT_BIN_DIR)/$(TARGETS)