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

     

  • 相关阅读:
    LeetCode 515. 在每个树行中找最大值(Find Largest Value in Each Tree Row)
    LeetCode 114. 二叉树展开为链表(Flatten Binary Tree to Linked List)
    LeetCode 199. 二叉树的右视图(Binary Tree Right Side View)
    LeetCode 1022. 从根到叶的二进制数之和(Sum of Root To Leaf Binary Numbers)
    LeetCode 897. 递增顺序查找树(Increasing Order Search Tree)
    LeetCode 617. 合并二叉树(Merge Two Binary Trees)
    LeetCode 206. 反转链表(Reverse Linked List) 16
    LeetCode 104. 二叉树的最大深度(Maximum Depth of Binary Tree)
    LeetCode 110. 平衡二叉树(Balanced Binary Tree) 15
    LeetCode 108. 将有序数组转换为二叉搜索树(Convert Sorted Array to Binary Search Tree) 14
  • 原文地址:https://www.cnblogs.com/yuaren/p/3468231.html
Copyright © 2011-2022 走看看