通用makefile书写

.PHONY: 
    clean

#******工具链说明****/    
#arm-linux-* 和 arm-elf-*区别主要表现在C语言库的实现上,例如不同系统调用,不同的函数集实现,不同的ABI启动代码以及不同系统特性等微小的差别。 
#arm-linux-*和 arm-elf-*的使用没有一个绝对的标准,排除不同库实现的差异,gcc可以编译任何系统。arm-linux-*和 arm-elf-*都可以用来编译裸机程序和操作系统,只是在遵循下面的描述时系统程序显得更加协调: 
#arm-linux-*针对运行linux的ARM机器,其依赖于指定的C语言库Glibc,因为同样使用Glibc的linux而使得arm-linux-*在运行linux的ARM机器上编译显得更加和谐。 
#arm-elf-*则是一个独立的编译体系,不依赖于指定的C语言库Glibc,可以使用newlib等其他C语言库,不要求操作系统支持,当其使用为嵌入式系统而设计的一些轻巧的C语言库时编译裸机程序(没有linux等大型操作系统的程序),如监控程序,
#bootloader等能使得系统程序更加小巧快捷。

CC          = gcc
LD          = ld
AR          = ar
RM          = rm
OBJDUMP     = objdump

#-nostdinc
CFLAG = -I$(INC_DIR) -I$(SRC_DIR) -Wall -g -O2

ALL  = target

 _SRCS_LIST  = \
            test.c
            
DIR         = .
INC_DIR     =$(DIR)/include
SRC_DIR     =$(DIR)/source
OBJ_DIR        = $(DIR)/Obj

_OBJS       = $(addprefix $(OBJ_DIR)/, $(basename $(_SRCS_LIST)))
OBJS        = $(addsuffix .o, $(_OBJS))


#自动化变量
#   $<    第一个依赖文件的名称=======一般单独编译是用
#   $@    目标的完整名称*****
#   $^    所有的依赖文件,以空格分开,不包含重复的依赖文件******
#   $?    所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚


$(ALL) : $(OBJS)
    $(CC) -static  $^ -o $@ 
    
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.c
    $(CC) $(CFLAG) -c $^ -o $@ 
        
clean:
    $(RM) -rf $(ALL) $(OBJ_DIR)/*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值