zoukankan      html  css  js  c++  java
  • 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)

     

    作者:cumtchw
    出处:http://www.cnblogs.com/cumtchw/
    我的博客就是我的学习笔记,学习过程中看到好的博客也会转载过来,若有侵权,与我联系,我会及时删除。

  • 相关阅读:
    无向图最小割Stoer-Wagner算法学习
    centos7下opencv的安装
    problems when installed mysql in linux ubuntu
    gcc内嵌汇编
    python第三方库镜像地址
    docker命令
    搭建小型web服务
    装饰器
    docker-influxdb
    shell基础命令
  • 原文地址:https://www.cnblogs.com/cumtchw/p/10869014.html
Copyright © 2011-2022 走看看