HISI3536_makefile_hise(备份)

 

#------------------------------------------------------------------------------
#
# 通用定义
#
#------------------------------------------------------------------------------
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           #把多个.o文件合并成一个.o文件或静态库文件,用于创建.a库
NM        = $(CROSS_COMPILE)nm              #没用到
STRIP    = $(CROSS_COMPILE)strip           #去掉调试信息,执行文件将变小。
RM        = rm -f

#------------------------------------------------------------------------------
#
# 目录定义
#
#------------------------------------------------------------------------------
SRC_DIR:=./src          #定义源文件目录
OBJ_PATH:=./obj         #定义中间文件输出路径
INCL_DIR:=./include     #定义头文件路径

#------------------------------------------------------------------------------
#
# 编译参数 定义
#
#------------------------------------------------------------------------------
CFLAGS := -fPIC -g                                 #-g是指包含调试信息,这样可以用gdb进行调试。
CFLAGS += -Wall                                    #打印编译时所有的错误或者警告信息
CFLAGS += $(foreach dir,$(INCL_DIR),-I$(dir))      #其实就是包含头文件。
CFLAGS += -DDEBUG                                  #宏定义,程序中的条件编译时用到,

#------------------------------------------------------------------------------
#
# 待编译文件整理
#
#------------------------------------------------------------------------------
SRCS:=$(wildcard $(SRC_DIR)/*.c $(SRC_DIR)/gsoap/*.c $(SRC_DIR)/onvif/*.c)      #定义源文件变量,其实就是源文件列表。
#addsuffix是为后面的文件列表加后缀,这里是加上后缀.o;
#addprefix是用来添加前缀的,这里的作用应该是加上目录前缀;./obj/;
#notdir是用来去掉所有的目录信息,后面的文件名列表将只有文件名,不再包含目录信息。
#basenmae用来从文件名列表中取出各个文件的前缀部分。
#下面的这一行综合起来就是把SRC里面的所有.C文件去掉目录,去掉.C后缀,然后改成OBJ路径,后缀改成.O;
OBJS:=$(addsuffix .o, $(addprefix $(OBJ_PATH)/,$(basename $(notdir $(SRCS)))))  
DEPENDS:=$(patsubst %.o,%.d,$(OBJS)) #patsubst是把后面文件列表中所有.o结尾的文件替换成.d结尾的文件。                                               #

#------------------------------------------------------------------------------
#
# 编译目标定义
#
#------------------------------------------------------------------------------
PROG             := onvifdemo    #可执行文件的名字。
LIBA            := libonvif.a   #生成的.a库的名字。

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

all:liba bin

#------------------------------------------------------------------------------
#
#
# 库文件生成规则
#
#------------------------------------------------------------------------------
liba:$(LIBA)               #这个makefile的最终目的应该是生成一个.a库文件。

$(LIBA):$(OBJS)
    $(AR) $(LIBA) $(OBJS)  #依赖.o文件生成.a库。

#------------------------------------------------------------------------------
#
#
 可执行文件生成规则
#
#------------------------------------------------------------------------------
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 $$@   #-MT是指在生成的依赖文件中,指定依赖规则中的目标。
endef
#---循环遍历所有.c文件,编译成.o 文件
$(foreach afile,$(SRCS),$(eval $(call compileobj,$(afile))))

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

-include $(DEPENDS)

 

 

posted @ 2019-05-15 13:51  cumtchw  阅读(194)  评论(0编辑  收藏  举报