makefile文件模板

Posted on 2013-12-10 21:32  已过而立  阅读(884)  评论(0编辑  收藏  举报

  适用于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

 

 

Copyright © 2024 已过而立
Powered by .NET 8.0 on Kubernetes