3536 makefile

#------------------------------------------------------------------------------
#
# 通用定义
#
#------------------------------------------------------------------------------
#CROSS_COMPILE = arm-hisiv300-linux-//根据具体编译器修改
AS        = $(CROSS_COMPILE)as
LD        = $(CROSS_COMPILE)ld -shared -o
CC        = $(CROSS_COMPILE)gcc
CP        = $(CC) -E
AR        = $(CROSS_COMPILE)ar rc
NM        = $(CROSS_COMPILE)nm
STRIP    = $(CROSS_COMPILE)strip
RM        = rm -f

#------------------------------------------------------------------------------
#
# 目录定义
#
#------------------------------------------------------------------------------
SRC_DIR:=./src
OBJ_PATH:=./obj
INCL_DIR:=./include

#------------------------------------------------------------------------------
#
# 编译参数 定义
#
#------------------------------------------------------------------------------
CFLAGS := -fPIC -g
CFLAGS += -Wall
CFLAGS += $(foreach dir,$(INCL_DIR),-I$(dir))
CFLAGS += -DDEBUG

#------------------------------------------------------------------------------
#
# 待编译文件整理
#
#------------------------------------------------------------------------------
SRCS:=$(wildcard $(SRC_DIR)/*.c $(SRC_DIR)/gsoap/*.c $(SRC_DIR)/onvif/*.c)
OBJS:=$(addsuffix .o, $(addprefix $(OBJ_PATH)/,$(basename $(notdir $(SRCS)))))
DEPENDS:=$(patsubst %.o,%.d,$(OBJS))

#------------------------------------------------------------------------------
#
# 编译目标定义
#
#------------------------------------------------------------------------------
PROG             := onvifdemo
LIBA            := libonvif.a

#------------------------------------------------------------------------------
#
#
# 伪目标定义
#
#------------------------------------------------------------------------------
.PHONY: all liba bin clean

all:liba bin

#------------------------------------------------------------------------------
#
#
# 库文件生成规则
#
#------------------------------------------------------------------------------
liba:$(LIBA)

$(LIBA):$(OBJS)
    $(AR) $(LIBA) $(OBJS)

#------------------------------------------------------------------------------
#
#
 可执行文件生成规则
#
#------------------------------------------------------------------------------
bin:$(PROG)

$(PROG):$(LIBA)
    $(CC) $(CFLAGS) -c demo.c -o $(OBJ_PATH)/demo.o
    $(CC) -o $(PROG) $(OBJ_PATH)/demo.o $(LIBA)
    $(STRIP) $(PROG)
    
#------------------------------------------------------------------------------
#
# 目标清除规则
#
#------------------------------------------------------------------------------
clean:
    $(RM) obj/* $(LIBA) $(PROG)

#------------------------------------------------------------------------------
#
# 中间文件生成规则
#
#------------------------------------------------------------------------------

#---定义函数,将已知 .c 文件名转换为相应的 .o文件名,统一输出到obj目录下
define src_to_obj=
    $(addsuffix .o,$(addprefix $(OBJ_PATH)/,$(basename $(notdir $(1)))))
endef
#---定义函数,将 .c 文件编译成相应的 .o 文件
define compileobj=
$$(call src_to_obj,$(1)):$(1)
    $$(info ---------COMPILE $(1)-------------------)
    $$(CC) $$(CFLAGS) -MMD -MT $$@ -MF $$(patsubst %.o,%.d,$$@) -c $$< -o $$@
endef
#---循环遍历所有.c文件,编译成.o 文件
$(foreach afile,$(SRCS),$(eval $(call compileobj,$(afile))))

#------------------------------------------------------------------------------

-include $(DEPENDS)

猜你喜欢

转载自www.cnblogs.com/cumtchw/p/10869014.html
今日推荐