Makefile简单范例

    xiaoxiao2022-07-03  113

    ###################### 空格变量定义 ############################ 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)
    最新回复(0)