• makefile文件模板


      适用于cortex-m3系列CPU的工程,操作系统为windows环境,交叉编译器Sourcery g++,方便修改

      1 # *****文件目录配置*******
      2 
      3 #交叉编译器系统路径
      4 TOOL_CHAIN_DIR=C:/Program Files/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_EABI/bin/
      5 
      6 #输出目录
      7 OUTDIR=Debug 
      8 
      9 #链接文件
     10 LD_SCRIPT=stm32_rom.ld
     11 
     12 #用户自定义头文件目录
     13 EXTRA_INC= -Iboard 
     14 EXTRA_INC+= -Iboard/STM32F10x_StdPeriph_Driver/inc 
     15 EXTRA_INC+= -Icpu 
     16 EXTRA_INC+= -Iinclude/k_inc
     17 EXTRA_INC+= -IApp
     18 
     19 
     20 # ***** CPU信息 ******
     21 MCU=cortex-m3
     22 CHIP=STM32F103
     23 BOARD=FMC
     24 
     25 # *****编译器相关命令配置*******
     26 
     27 # 编译器前缀
     28 TCHAIN_PREFIX=arm-none-eabi-
     29 
     30 # 删除文件命令 windows环境
     31 REMOVE_CMD=del
     32 
     33 # 编译器
     34 CC      = $(TOOL_CHAIN_DIR)$(TCHAIN_PREFIX)gcc
     35 CPP     = $(TOOL_CHAIN_DIR)$(TCHAIN_PREFIX)g++
     36 AR      = $(TOOL_CHAIN_DIR)$(TCHAIN_PREFIX)ar
     37 OBJCOPY = $(TOOL_CHAIN_DIR)$(TCHAIN_PREFIX)objcopy
     38 OBJDUMP = $(TOOL_CHAIN_DIR)$(TCHAIN_PREFIX)objdump
     39 SIZE    = $(TOOL_CHAIN_DIR)$(TCHAIN_PREFIX)size
     40 NM      = $(TOOL_CHAIN_DIR)$(TCHAIN_PREFIX)nm
     41 REMOVE  = $(REMOVE_CMD) /q
     42 
     43 
     44 # *******生成工程配置信息*********
     45 
     46 # 目标文件前缀名
     47 TARGET=FMCOS
     48 
     49 # 目标文件格式
     50 TARGET_FORMAT=ihex
     51 
     52 # 警告信息
     53 USE_WARNING=yes
     54 
     55 # 优化级别
     56 OPT=0
     57 
     58 # 用户自定义宏
     59 USER_DEFINE=STM32F10X_HD
     60 USER_DEFINE1=USE_STDPERIPH_DRIVER
     61 
     62 # 工程源码文件配置
     63 
     64 # .C源码文件
     65 CSRCS=$(wildcard board/*.c) $(wildcard board/STM32F10x_StdPeriph_Driver/src/*.c) $(wildcard cpu/*.c) $(wildcard kernel/*.c)
     66 CSRCS+= $(wildcard App/*.c)
     67 
     68 # .S汇编文件
     69 ASRCS=$(wildcard board/*.S) $(wildcard cpu/*.S)
     70 
     71 # *********相关编译选项**********
     72 
     73 # thumb格式
     74 THUMB=-mthumb 
     75 
     76 # C 优化级别配置
     77 CFLAGS= -O$(OPT)
     78 # CPU
     79 CFLAGS+= -mcpu=$(MCU)  
     80 # 用户预定义宏 
     81 CFLAGS+= -D$(USER_DEFINE) -D$(USER_DEFINE1)  
     82 # 用户头文件目录  
     83 CFLAGS+=  $(EXTRA_INC)  
     84 
     85 #警告信息
     86 #    ifeq($(USE_WARNING),yes)
     87 CFLAGS+=  -Wall
     88 #endif
     89 
     90 # -Wa,-adhlns传递参数给汇编器,生成汇编信息列表文件
     91 # addprefix 函数 添加前缀  notdir 函数 去除名称中的路径
     92 # addsuffix 函数 添加后缀  basename 去掉文件名中的后缀
     93 # < 临时变量 表示一组文件
     94 # ex. pdir/cdir/foo.c  执行后变为  outdir/foo.lst
     95 CFLAGS+= -Wa,-adhlns=$(addprefix $(OUTDIR)/, $(notdir $(addsuffix .lst, $(basename $<)))) 
     96 
     97 # -MD 生成当前编译文件关联的详细信息,包括目标文件依赖的所有代码源码文件以及头文件,但是输出信息保存到.d
     98 # 件中
     99 # -MP 除了主文件外,为每个依赖文件增加一个伪目标,这个伪目标不依赖任何文件.可以避免在删除了头文件,
    100 # 但是没有相应的更新Makefile文件时 make 错误
    101 # -MF 设置输出的信息文件名称?
    102 # $@ 为规则中的目标文件集 $^为规则中的依赖文件集 $<为规则中的第一个依赖文件
    103 # $(@F) 不带路径名的目标文件 $(@D) 目标文件中的路径
    104 # ps.请手动在OUTDIR下创建dep文件夹
    105 CFLAGS+= -MD -MP -MF $(OUTDIR)/dep/$(@F).d
    106 # 调试
    107 CFLAGS+= -g3 -gdwarf-2
    108 
    109 
    110 ASFLAGS= -x assembler-with-cpp $(CFLAGS)  #汇编flags 
    111 
    112 # 链接 -Map 生成map文件
    113 LDFLAGS =  -Wl,-Map=$(OUTDIR)/$(TARGET).map
    114 # 链接脚本文件
    115 LDFLAGS += -T$(LD_SCRIPT)
    116 
    117 # ************输出消息定义*******************
    118 MSG_ERRORS_NONE = Errors: none
    119 MSG_BEGIN = "-------- begin (mode: TEST) --------"
    120 MSG_END = "--------  end  --------"
    121 MSG_SIZE_BEFORE = Size before: 
    122 MSG_SIZE_AFTER = Size after build:
    123 MSG_LOAD_FILE = Creating load file:
    124 MSG_EXTENDED_LISTING = Creating Extended Listing/Disassembly:
    125 MSG_SYMBOL_TABLE = Creating Symbol Table:
    126 MSG_LINKING = "**** Linking :"
    127 MSG_COMPILING = "**** Compiling C :"
    128 MSG_COMPILING_ARM = "**** Compiling C (ARM-only):"
    129 MSG_COMPILINGCPP = "Compiling C++ :"
    130 MSG_COMPILINGCPP_ARM = "Compiling C++ (ARM-only):"
    131 MSG_ASSEMBLING = "**** Assembling:"
    132 MSG_ASSEMBLING_ARM = "****Assembling (ARM-only):"
    133 MSG_CLEANING = Cleaning project:
    134 MSG_FORMATERROR = Can not handle output-format
    135 MSG_LPC21_RESETREMINDER = You may have to bring the target in bootloader-mode now.
    136 MSG_ASMFROMC = "Creating asm-File from C-Source:"
    137 MSG_ASMFROMC_ARM = "Creating asm-File from C-Source (ARM-only):"
    138 
    139 
    140 ALLSRC=$(CSRCS) $(ASRCS) # 所有代码文件详细的名称 
    141 ALLSRCBASE = $(notdir $(basename $(ALLSRC))) #去除了路径及后缀的所有文件名
    142 
    143 
    144 ALLSRCBASE = $(notdir $(basename $(ALLSRC)))
    145 
    146 # Define all object files.
    147 ALLOBJ     = $(addprefix $(OUTDIR)/, $(addsuffix .o, $(ALLSRCBASE)))
    148 
    149 # Define all listing files (used for make clean).
    150 LSTFILES   = $(addprefix $(OUTDIR)/, $(addsuffix .lst, $(ALLSRCBASE)))
    151 # Define all depedency-files (used for make clean).
    152 DEPFILES   = $(addprefix $(OUTDIR)/dep/, $(addsuffix .o.d, $(ALLSRCBASE)))
    153 
    154 elf: $(OUTDIR)/$(TARGET).elf
    155 lss: $(OUTDIR)/$(TARGET).lss 
    156 sym: $(OUTDIR)/$(TARGET).sym
    157 hex: $(OUTDIR)/$(TARGET).hex
    158 bin: $(OUTDIR)/$(TARGET).bin
    159 
    160 # Default target
    161 all: begin gccversion build sizeafter  end
    162 
    163 ifeq ($(TARGET_FORMAT),ihex)
    164 build: elf hex lss sym
    165 else 
    166 ifeq ($(TARGET_FORMAT),binary)
    167 build: elf bin lss sym
    168 else 
    169 ifeq ($(TARGET_FORMAT),both)
    170 build: elf hex bin lss sym
    171 else 
    172 $(error "$(MSG_FORMATERROR) $(TARGET_FORMAT)")
    173 endif
    174 endif
    175 endif
    176 
    177 
    178 # Eye candy.
    179 begin: 
    180     @echo $(MSG_BEGIN) 
    181     @echo $(ALLOBJ)
    182   
    183 end:
    184     @echo $(MSG_END)
    185     ELFSIZE = $(SIZE) -A  $(OUTDIR)/$(TARGET).elf
    186 
    187 sizeafter:
    188     @echo $(MSG_SIZE_AFTER)
    189     $(ELFSIZE)
    190         
    191 # Display compiler version information.
    192 gccversion : 
    193         @$(CC) --version
    194         @echo $(ALLOBJ)
    195 
    196 
    197 # Create final output file (.hex) from ELF output file.
    198 %.hex: %.elf
    199         @echo $(MSG_LOAD_FILE) $@
    200         $(OBJCOPY) -O ihex $< $@
    201         
    202 # Create final output file (.bin) from ELF output file.
    203 %.bin: %.elf
    204         @echo $(MSG_LOAD_FILE) $@
    205         $(OBJCOPY) -O binary $< $@
    206 
    207 # Create extended listing file/disassambly from ELF output file.
    208 # using objdump testing: option -C
    209 %.lss: %.elf
    210         @echo $(MSG_EXTENDED_LISTING) $@
    211         $(OBJDUMP) -h -S -C -r $< > $@
    212 
    213 # Create a symbol table from ELF output file.
    214 %.sym: %.elf
    215         @echo $(MSG_SYMBOL_TABLE) $@
    216         $(NM) -n $< > $@
    217 
    218 # Link: create ELF output file from object files.
    219 .SECONDARY : $(TARGET).elf
    220 .PRECIOUS : $(ALLOBJ)
    221 %.elf:  $(ALLOBJ)  
    222         @echo $(MSG_LINKING) $@
    223         $(CC) $(THUMB) $(CFLAGS) $(ALLOBJ) --output $@ $(LDFLAGS)
    224 
    225 
    226 
    227 # Assemble: create object files from assembler source files.
    228 define ASSEMBLE_TEMPLATE
    229 $(OUTDIR)/$(notdir $(basename $(1))).o : $(1)
    230         @echo $(MSG_ASSEMBLING) $$< "->" $$@
    231         $(CC) -c $(THUMB) $$(ASFLAGS) $$< -o $$@ 
    232 endef
    233 $(foreach src, $(ASRCS), $(eval $(call ASSEMBLE_TEMPLATE, $(src)))) 
    234 
    235 # Compile: create object files from C source files.
    236 # 函数 生成.C的所有.O文件
    237 define COMPILE_C_TEMPLATE
    238 $(OUTDIR)/$(notdir $(basename $(1))).o : $(1)
    239         @echo $(MSG_COMPILING) $$< "->" $$@
    240         $(CC) -c $(THUMB) $$(CFLAGS)  $$< -o $$@ 
    241 endef
    242 $(foreach src, $(CSRCS), $(eval $(call COMPILE_C_TEMPLATE, $(src)))) 
    243 
    244 
    245 # Compile: create assembler files from C source files. ARM/Thumb
    246 # 函数  生成汇编文件
    247 $(SRC:.c=.s) : %.s : %.c
    248         @echo $(MSG_ASMFROMC) $< to $@
    249         $(CC) $(THUMB) -S $(CFLAGS)  $< -o $@
    250 
    251 # Target: clean project.
    252 clean: begin clean_list  end
    253 
    254 clean_list :
    255 ##      @echo
    256     @echo $(MSG_CLEANING)
    257     $(REMOVE) $(OUTDIR)$(TARGET).map
    258     $(REMOVE) $(OUTDIR)$(TARGET).elf
    259     $(REMOVE) $(OUTDIR)$(TARGET).hex
    260     $(REMOVE) $(OUTDIR)$(TARGET).bin
    261     $(REMOVE) $(OUTDIR)$(TARGET).sym
    262     $(REMOVE) $(OUTDIR)$(TARGET).lss
    263     $(REMOVE) $(OUTDIR)*.*
    264     $(REMOVE) $(LSTFILES)
    265     $(REMOVE) $(DEPFILES)
    266     $(REMOVE) $(SRC:.c=.s)
    267 
    268 
    269 # Create output files directory
    270 $(shell mkdir $(OUTDIR) 2>/dev/null)
    271 #$(shell mkdir $(OUTDIR) 2>NUL)
    272 
    273 # Include the dependency files.
    274 -include $(shell mkdir $(OUTDIR)/dep 2>/dev/null) $(wildcard $(OUTDIR)/dep/*)
    275 #-include $(shell mkdir $(OUTDIR)/dep 2>NUL) $(wildcard $(OUTDIR)/dep/*)
    276 
    277 
    278 # Listing of phony targets.
    279 .PHONY : all begin finish end sizebefore sizeafter gccversion 
    280 build elf hex bin lss sym clean clean_list program

     

  • 相关阅读:
    pair
    非整除集合
    集合 set
    实现字通配符*
    vector
    矩阵及其初等变换
    求数组中连续子数组(最少有一个元素)的最大和。
    最长上升序列(Lis)
    st表求区间最大值
    [Noip2015] 信息传递
  • 原文地址:https://www.cnblogs.com/yuaren/p/3468231.html
Copyright © 2020-2023  润新知