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/
我的博客就是我的学习笔记,学习过程中看到好的博客也会转载过来,若有侵权,与我联系,我会及时删除。