###################### 空格变量定义 ############################
NULLSTRING:=
SPACE:=$(NULLSTRING) #end
###################### 可执行配置 ############################
#生成可执行程序名
TARGET:=test
#生成执行文件依赖的c文件 (多个参数以空格分割,换行用\分割)
OBJ_C:=a.c
CFLAGS :=
#依赖库指定 例:库路径 -L./ 库指定 -lxx (多个参数以空格分割,换行用\分割)
LDFLAGS :=
#依赖头文件路径指定 例: ./ 该处填 -I./ (多个参数以空格分割,换行用\分割)
INCFLAGS :=
##############################################################
###################### 静态库配置 ############################
#生成静态库的名 例:libxx.a 该处填xx
STATIC_LIB_NAME:=bbbb
#生成静态库依赖的c文件(多个参数以空格分割,换行用\分割)
STATIC_LIB_C:=b.c
STATIC_LIB_CFLAGS:=
#依赖头文件路径指定 例: ./ 该处填 -I./ (多个参数以空格分割,换行用\分割)
STATIC_LIB_INCFLAGS:=
#依赖库指定 例:库路径 -L./ 库指定 -lxx (多个参数以空格分割,换行用\分割)
STATIC_LIB_LDFLAGS:=
STATIC_LIB_PATH:=./
#STATIC_LIB_INC_PATH:=
#STATIC_LIB_CFLAGS:=
#STATIC_LIB_INCFLAGS:=$(if $(STATIC_LIB_INC_PATH),$(subst $(SPACE),$(SPACE)-I,-I$(STATIC_LIB_INC_PATH)))
#STATIC_LIB_LDFLAGS:=$(if $(STATIC_LIB_PATH),$(subst $(SPACE),$(SPACE)-L,-L$(STATIC_LIB_PATH)))
##############################################################
###################### 动态库配置 ############################
#生成动态库的名 例:libxx.so 该处填xx
DYNAMIC_LIB_NAME:=aaa
#生成动态库依赖的c文件(多个参数以空格分割,换行用\分割)
DYNAMIC_LIB_C:=c.c
DYNAMIC_LIB_CFLAGS:=
#依赖头文件路径指定 例: ./ 该处填 -I./ (多个参数以空格分割,换行用\分割)
DYNAMIC_LIB_INCFLAGS:=
#依赖库指定 例:库路径 -L./ 库指定 -lxx (多个参数以空格分割,换行用\分割)
DYNAMIC_LIB_LDFLAGS:=
DYNAMIC_LIB_PATH= ./
#DYNAMIC_LIB_INC_PATH=
#DYNAMIC_LIB_CFLAGS:=
#DYNAMIC_LIB_INCFLAGS:=$(if $(DYNAMIC_LIB_INC_PATH),$(subst $(SPACE),$(SPACE)-I,-I$(DYNAMIC_LIB_INC_PATH)))
#DYNAMIC_LIB_LDFLAGS:= $(if $(DYNAMIC_LIB_PATH),$(subst $(SPACE),$(SPACE)-L,-L$(DYNAMIC_LIB_PATH)))
##############################################################
###################### 编译器配置 ############################
#交叉编译器前缀配置,PC编译不用填写
CROSS_COMPILE:=
CC=$(CROSS_COMPILE)gcc
AR=$(CROSS_COMPILE)ar
##############################################################
###################### 命令配置 ############################
RM := rm
MV := mv
Q := @
############################################################
CFLAGS += $(STATIC_LIB_CFLAGS) $(DYNAMIC_LIB_CFLAGS)
LDFLAGS += $(STATIC_LIB_LDFLAGS) $(if $(STATIC_LIB_PATH),-L$(STATIC_LIB_PATH)) $(if $(STATIC_LIB_NAME),-l$(STATIC_LIB_NAME)) \
$(DYNAMIC_LIB_LDFLAGS) $(if $(DYNAMIC_LIB_PATH),-L$(DYNAMIC_LIB_PATH)) $(if $(DYNAMIC_LIB_NAME),-l$(DYNAMIC_LIB_NAME))
INCFLAGS += $(STATIC_LIB_INCFLAGS) $(DYNAMIC_LIB_INCFLAGS)
STATIC_LIB:=$(if $(STATIC_LIB_NAME),lib$(STATIC_LIB_NAME).a,)
DYNAMIC_LIB:=$(if $(DYNAMIC_LIB_NAME),lib$(DYNAMIC_LIB_NAME).so,)
OBJ_O:=$(OBJ_C:%c=%o)
STATIC_LIB_O:=$(STATIC_LIB_C:%c=%o)
DYNAMIC_LIB_O:=$(DYNAMIC_LIB_C:%c=%o)
#输出变量值
#$(warning $(STATIC_LIB_NAME))
#输出变量值,并停止Makefile运行
#$(error $(STATIC_LIB_NAME))
#命令要以Tab开头
all:$(STATIC_LIB) $(DYNAMIC_LIB) $(TARGET)
$(TARGET):$(OBJ_C)
$(Q)$(CC) $(OBJ_C) -o $(TARGET) $(CFLAGS) $(LDFLAGS)
$(STATIC_LIB):$(STATIC_LIB_C)
$(Q)$(CC) -c $^ $(STATIC_LIB_CFLAGS)
$(Q)$(AR) -cr $(STATIC_LIB) $(STATIC_LIB_O)
$(DYNAMIC_LIB):$(DYNAMIC_LIB_C)
$(Q)$(CC) -c -fPIC $^ $(DYNAMIC_LIB_CFLAGS)
$(Q)$(CC) -shared -o $(DYNAMIC_LIB) $(DYNAMIC_LIB_O)
clean:
$(Q)$(RM) $(TARGET) $(STATIC_LIB) $(DYNAMIC_LIB) $(OBJ_O) $(STATIC_LIB_O) $(DYNAMIC_LIB_O)