Makefile简单范例

###################### 空格变量定义 ############################
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)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值