stm32 在windows下 使用gcc 编译的makefile脚本
2017-06-08 22:30
337 查看
cygwin_build.bat
makefile如下:
drv_config.mk文件:
@ECHO OFF ::---------------------------------------------------------- :: configure cross compiler path ::---------------------------------------------------------- SET COMPILER_ROOT_PATH=d:/arm-2013-11 SET COMPILER_PATH=D:\arm-2013-11 SET COMPILER_BIN=%COMPILER_PATH%\bin ::---------------------------------------------------------- :: configure Cygwin path ::---------------------------------------------------------- SET CYGWIN_ROOT=d:\cygwin ::---------------------------------------------------------- :: regular configuration, need not change ::---------------------------------------------------------- SET LANG=C.UTF-8 SET PATH=C:\WINDOWS\system32;C:\WINDOWS SET PATH=%CYGWIN_ROOT%\bin;%COMPILER_BIN%;%PATH% SET HOME=%~dp0 ::---------------------------------------------------------- :: show system settings on start ::---------------------------------------------------------- @ECHO ======================================= @ECHO HOME = %HOME% @ECHO COMPILER_PATH = %COMPILER_PATH% @ECHO CYGWIN_ROOT = %CYGWIN_ROOT% @ECHO ======================================= @bash --login -i
makefile如下:
#******************************************************************************* # Copyright (c) 2013 semilog Tech LTD. ALL rights reserved. # # Filename: Makefile # Author: gaowei semilog@163.com # Date: 2017-05-28 # Version: 0.2 # Description: Created for build stm32 project under windows by using arm gcc # # ----------------------------- History -------------------------------------- # Author: # Date: # Modification: #********************************************************************************/ # ------------------------------------------------------------------------------ # # include other file # ------------------------------------------------------------------------------ # include drv_config.mk # ------------------------------------------------------------------------------ # # system configure # ------------------------------------------------------------------------------ # CPU = cortex-m3 ARCH = armv7-m PROJECT = RF_machine LD_SCRIPT_FILE = stm32_flash.ld # ------------------------------------------------------------------------------ # # Compiler configuration # ------------------------------------------------------------------------------ # COMPILER_ROOT = $(COMPILER_ROOT_PATH) CROSS_COMPILE = $(COMPILER_ROOT)/bin/arm-none-eabi- # ------------------------------------------------------------------------------ # # Path # ------------------------------------------------------------------------------ # USER_DIR = ../source/user DRIVER_DIR = ../source/driver OUTPUT_DIR = ../output BIN_DIR = ../bin # ------------------------------------------------------------------------------ # # default # ------------------------------------------------------------------------------ # default: all # ------------------------------------------------------------------------------ # # Compiler tools # ------------------------------------------------------------------------------ # AS = $(CROSS_COMPILE)as LD = $(CROSS_COMPILE)ld CC = $(CROSS_COMPILE)gcc CPP = $(CC) -E AR = $(CROSS_COMPILE)ar NM = $(CROSS_COMPILE)nm STRIP = $(CROSS_COMPILE)strip OBJCOPY = $(CROSS_COMPILE)objcopy OBJDUMP = $(CROSS_COMPILE)objdump SIZE = $(CROSS_COMPILE)size # ------------------------------------------------------------------------------ # # shell command # ------------------------------------------------------------------------------ # CD = cd MKDIR = mkdir -p RMDIR = rm -rf RM = rm -f SED = sed ECHO = echo COPY = cp CAT = cat MV = mv TEST = test # ------------------------------------------------------------------------------ # # DEFINE # ------------------------------------------------------------------------------ # DEFINE = -DUSE_STDPERIPH_DRIVER DEFINE += -DSTM32F10X_HD DEFINE += -DDEBUG # ------------------------------------------------------------------------------ # # INCLUDE # ------------------------------------------------------------------------------ # INCLUDE = -I$(USER_DIR)/inc INCLUDE += -I$(DRIVER_DIR)/stm32_lib/inc INCLUDE += -I$(DRIVER_DIR)/CMSIS/CoreSupport INCLUDE += -I$(DRIVER_DIR)/CMSIS/STM32F10x # ------------------------------------------------------------------------------ # # INCLUDE # ------------------------------------------------------------------------------ # LDLIBS = -L$(COMPILER_ROOT)/arm-none-eabi/lib LDLIBS += -L$(COMPILER_ROOT)/lib/gcc/arm-none-eabi/4.8.1 # ------------------------------------------------------------------------------ # # CCFLAGS # ------------------------------------------------------------------------------ # CCFLAGS = -mcpu=$(CPU) -march=$(ARCH) CCFLAGS += -mthumb -mthumb-interwork CCFLAGS += -mapcs-frame -mabi=aapcs CCFLAGS += -mfloat-abi=softfp CCFLAGS += -mlittle-endian CCFLAGS += -fdata-sections -ffunction-sections -fsigned-char CCFLAGS += -fmessage-length=0 CCFLAGS += -Og -gdwarf-2 CCFLAGS += -Wall -Wextra DEPFLAGS = -Wp,-MT,$@,-MMD,$(patsubst %.o,%.d,$@) #DEPFLAGS = -MT $@ -MMD -MP -MF $(patsubst %.o,%.d,$@) # ------------------------------------------------------------------------------ # # ASFLAGS # ------------------------------------------------------------------------------ # ASFLAGS = -mcpu=$(CPU) -march=$(ARCH) ASFLAGS += -mthumb -mthumb-interwork ASFLAGS += -mapcs-frame -mapcs-32 ASFLAGS += -mfloat-abi=softfp ASFLAGS += -mlittle-endian ASFLAGS += --warn -gdwarf-2 ASFLAGS += -adhlns=$(patsubst %.o,%.lst,$@) ASFLAGS += --MD $(patsubst %.o,%.d,$@) # ------------------------------------------------------------------------------ # # ARFLAGS # ------------------------------------------------------------------------------ # ARFLAGS = -rc # ------------------------------------------------------------------------------ # # LDFLAGS # ------------------------------------------------------------------------------ # LDFLAGS = --script=$(LD_SCRIPT_FILE) LDFLAGS += --Map=$(OUTPUT_DIR)/$(PROJECT).map LDFLAGS += --gc-sections LDFLAGS += --cref # ------------------------------------------------------------------------------ # # ELF To bin hex s19 # ------------------------------------------------------------------------------ # # intel 32 bit hex ELF2HEXOUT = -O ihex # motorola 32 bit hex ELF2S19OUT = -O srec # plain bin ELF2BINOUT = -O binary # ------------------------------------------------------------------------------ # # C Source file # ------------------------------------------------------------------------------ # USER_SRC = $(wildcard $(USER_DIR)/src/*.c) DRIVER_SRC = $(wildcard $(DRIVER_DIR)/CMSIS/CoreSupport/*.c) DRIVER_SRC += $(wildcard $(DRIVER_DIR)/CMSIS/STM32F10x/*.c) DRIVER_SRC += $(addprefix $(DRIVER_DIR)/stm32_lib/src/, $(LIB_SRC)) #all C Source files C_SOURCE = $(USER_SRC) $(DRIVER_SRC) # the c objects lists USER_OBJECTS = $(addprefix $(OUTPUT_DIR)/, $(subst .c,.o, $(notdir $(USER_SRC)))) DRIVER_OBJECTS = $(addprefix $(OUTPUT_DIR)/, $(subst .c,.o, $(notdir $(DRIVER_SRC)))) # ------------------------------------------------------------------------------ # # AS Source file # ------------------------------------------------------------------------------ # STARTUP_SRC = $(wildcard $(DRIVER_DIR)/CMSIS/STM32F10x/startup/*.s) # all asm Source files ASM_SOURCE = $(STARTUP_SRC) # all asm objects lists STARTUP_OBJECTS = $(addprefix $(OUTPUT_DIR)/, $(subst .s,.o, $(notdir $(STARTUP_SRC)))) DRIVER_OBJECTS += $(STARTUP_OBJECTS) #=============================================================================== # Compile #=============================================================================== ALL_OBJECTS = $(USER_OBJECTS) $(DRIVER_OBJECTS) $(OUTPUT_DIR)/%.o:$(USER_DIR)/src/%.c @$(ECHO) Compile $< @-$(MKDIR) $(OUTPUT_DIR) @$(CC) $(CCFLAGS) $(DEFINE) $(INCLUDE) $(DEPFLAGS) -c $< -o $@ @$(ECHO) Done! $(OUTPUT_DIR)/%.o:$(DRIVER_DIR)/stm32_lib/src/%.c @$(ECHO) Compile $< @-$(MKDIR) $(OUTPUT_DIR) @$(CC) $(CCFLAGS) $(DEFINE) $(INCLUDE) $(DEPFLAGS) -c $< -o $@ @$(ECHO) Done! $(OUTPUT_DIR)/%.o:$(DRIVER_DIR)/CMSIS/CoreSupport/%.c @$(ECHO) Compile $< @-$(MKDIR) $(OUTPUT_DIR) @$(CC) $(CCFLAGS) $(DEFINE) $(INCLUDE) $(DEPFLAGS) -c $< -o $@ @$(ECHO) Done! $(OUTPUT_DIR)/%.o:$(DRIVER_DIR)/CMSIS/STM32F10x/%.c @$(ECHO) Compile $< @-$(MKDIR) $(OUTPUT_DIR) @$(CC) $(CCFLAGS) $(DEFINE) $(INCLUDE) $(DEPFLAGS) -c $< -o $@ @$(ECHO) Done! $(OUTPUT_DIR)/%.o:$(DRIVER_DIR)/CMSIS/STM32F10x/startup/%.s @$(ECHO) Compile $< @-$(MKDIR) $(OUTPUT_DIR) @$(AS) $(ASFLAGS) $< -o $@ @$(ECHO) Done! #=============================================================================== # user code Compile #=============================================================================== user: $(USER_OBJECTS) USER_CLEAN_OBJ = $(USER_OBJECTS) USER_CLEAN_DEP = $(subst .o,.d, $(USER_CLEAN_OBJ)) userclean: -$(RM) $(USER_CLEAN_OBJ) -$(RM) $(USER_CLEAN_DEP) @$(ECHO) "" @$(ECHO) "-------------------------------------" @$(ECHO) "--- User objs clean have done. ---" @$(ECHO) "-------------------------------------" #=============================================================================== # driver Compile (STM32 standard peripheral lib) #=============================================================================== DRIVER_LIB = $(OUTPUT_DIR)/stm32_dirver.a driver: $(DRIVER_LIB) $(DRIVER_LIB): $(DRIVER_OBJECTS) @$(ECHO) "" @$(AR) $(ARFLAGS) $@ $(DRIVER_OBJECTS) @$(ECHO) "=======================================" @$(ECHO) "--- make stm32 driver $@ done." @$(ECHO) "=======================================" @$(ECHO) "" DRIVER_CLEAN_OBJ = $(DRIVER_OBJECTS) DRIVER_CLEAN_DEP = $(subst .o,.d,$(DRIVER_CLEAN_OBJ)) DRIVER_CLEAN_LIB = $(DRIVER_LIB) driverclean: -$(RM) $(DRIVER_CLEAN_OBJ) -$(RM) $(DRIVER_CLEAN_DEP) -$(RM) $(DRIVER_CLEAN_LIB) @$(ECHO) "" @$(ECHO) "-------------------------------------" @$(ECHO) "--- DRIVER objs clean have done. ---" @$(ECHO) "-------------------------------------" #=============================================================================== # link #=============================================================================== link: $(BIN_DIR)/$(PROJECT).elf HEX_OUT S19_OUT BIN_OUT $(BIN_DIR)/$(PROJECT).elf: $(USER_OBJECTS) $(DRIVER_LIB) @$(ECHO) "--- Linking $@" @$(TEST) -d $(BIN_DIR) || $(MKDIR) $(BIN_DIR) @$(LD) $(LDFLAGS) $(LDLIBS) -o $@ $^ @$(SIZE) --format=berkeley -d $@ @$(ECHO) "done" HEX_OUT: $(BIN_DIR)/$(PROJECT).hex S19_OUT: $(BIN_DIR)/$(PROJECT).s19 BIN_OUT: $(BIN_DIR)/$(PROJECT).bin $(BIN_DIR)/$(PROJECT).hex: $(BIN_DIR)/$(PROJECT).elf @$(ECHO) "--- Generating Intel 32bit Hex file $@" @$(OBJCOPY) $(ELF2HEXOUT) $< $@ $(BIN_DIR)/$(PROJECT).s19: $(BIN_DIR)/$(PROJECT).elf @$(ECHO) "--- Generating Motorola 32bit Hex file $@" @$(OBJCOPY) $(ELF2S19OUT) $< $@ $(BIN_DIR)/$(PROJECT).bin: $(BIN_DIR)/$(PROJECT).elf @$(ECHO) "--- Generating plain bin file $@" @$(OBJCOPY) $(ELF2BINOUT) $< $@ linkclean: -$(RM) $(BIN_DIR)/*.elf -$(RM) $(BIN_DIR)/*.hex -$(RM) $(BIN_DIR)/*.map @$(ECHO) "" @$(ECHO) "-------------------------------------" @$(ECHO) "--- Link clean have done. ---" @$(ECHO) "-------------------------------------" #=============================================================================== # make all # make allclean #=============================================================================== all: user driver link allclean: userclean driverclean linkclean #=============================================================================== # help #=============================================================================== help: @$(ECHO) " make: all user cmsis fwlib link " @$(ECHO) "" @$(ECHO) "================ Make help ====================" @$(ECHO) "make make all" @$(ECHO) "make all[clean] compile all && link" @$(ECHO) "make link[clean] link all" @$(ECHO) "make user[clean] build user code" @$(ECHO) "make driver[clean] build stm32 standard std driver" @$(ECHO) "" @$(ECHO) "" #=============================================================================== # clean #=============================================================================== clean: cleanall cleanall: -$(RM) $(OUTPUT_DIR)/*.d -$(RM) $(OUTPUT_DIR)/*.o -$(RM) $(OUTPUT_DIR)/*.map -$(RM) $(OUTPUT_DIR)/*.lst -$(RM) $(OUTPUT_DIR)/*.a -$(RM) $(BIN_DIR)/*.elf -$(RM) $(BIN_DIR)/*.hex -$(RM) $(BIN_DIR)/*.s19 -$(RM) $(BIN_DIR)/*.bin @$(ECHO) "-------------------------------------" @$(ECHO) "--- Clean all have done. ---" @$(ECHO) "-------------------------------------" @$(ECHO) "" #=============================================================================== # include dependency files #=============================================================================== -include $(wildcard $(OUTPUT_DIR)/*.d) .PHONY: all clean default user driver userclean driverclean linkclean help \ HEX_OUT S19_OUT BIN_OUT #----------------------------- end of Makefile ----------------------------------
drv_config.mk文件:
#******************************************************************************* # Copyright (c) 2013 semilog Tech LTD. ALL rights reserved. # # Filename: drv_config.mk # Author: semilog semilog@163.com # Date: 2017-05-27 # Version: 0.1 # Description: Created for configuration of stm32 peripheral devices # # ----------------------------- History -------------------------------------- # Author: # Date: # Modification: #********************************************************************************/ # ------------------------------------------------------------------------------ # chose the needed stem32 peripheral modules # ------------------------------------------------------------------------------ USE_ADC = yes USE_BKP = no USE_CAN = no USE_CEC = no USE_CRC = yes USE_DAC = yes USE_DBGMCU = no USE_DMA = yes USE_EXTI = yes USE_FLASH = no USE_FSMC = no USE_GPIO = yes USE_I2C = yes USE_IWDG = no USE_PWR = yes USE_RCC = yes USE_RTC = yes USE_SDIO = no USE_SPI = no USE_TIM = yes USE_USART = yes USE_WWDG = no # ------------------------------------------------------------------------------ # modules Define # ------------------------------------------------------------------------------ LIB_SRC = misc.c ifeq ($(USE_ADC),yes) LIB_SRC += stm32f10x_adc.c endif ifeq ($(USE_BKP),yes) LIB_SRC += stm32f10x_bkp.c endif ifeq ($(USE_CAN),yes) LIB_SRC += stm32f10x_can.c endif ifeq ($(USE_CEC),yes) LIB_SRC += stm32f10x_cec.c endif ifeq ($(USE_CRC),yes) LIB_SRC += stm32f10x_crc.c endif ifeq ($(USE_DAC),yes) LIB_SRC += stm32f10x_dac.c endif ifeq ($(USE_DBGMCU),yes) LIB_SRC += stm32f10x_dbgmcu.c endif ifeq ($(USE_DMA),yes) LIB_SRC += stm32f10x_dma.c endif ifeq ($(USE_EXTI),yes) LIB_SRC += stm32f10x_exti.c endif ifeq ($(USE_FLASH),yes) LIB_SRC += stm32f10x_flash.c endif ifeq ($(USE_FSMC),yes) LIB_SRC += stm32f10x_fsmc.c endif ifeq ($(USE_GPIO),yes) LIB_SRC += stm32f10x_gpio.c endif ifeq ($(USE_I2C),yes) LIB_SRC += stm32f10x_i2c.c endif ifeq ($(USE_IWDG),yes) LIB_SRC += stm32f10x_iwdg.c endif ifeq ($(USE_PWR),yes) LIB_SRC += stm32f10x_pwr.c endif ifeq ($(USE_RCC),yes) LIB_SRC += stm32f10x_rcc.c endif ifeq ($(USE_RTC),yes) LIB_SRC += stm32f10x_rtc.c endif ifeq ($(USE_SDIO),yes) LIB_SRC += stm32f10x_sdio.c endif ifeq ($(USE_SPI),yes) LIB_SRC += stm32f10x_spi.c endif ifeq ($(USE_TIM),yes) LIB_SRC += stm32f10x_tim.c endif ifeq ($(USE_USART),yes) LIB_SRC += stm32f10x_usart.c endif ifeq ($(USE_WWDG),yes) LIB_SRC += stm32f10x_wwdg.c endif
相关文章推荐
- windows下使用gcc编译boost库
- Windows下使用nmake编译C/C++的makefile
- 在Windows下使用nmake+Makefile+编译ZThread库(附例子)
- 关于linux下执行脚本编译C++:需要使用make命令和makefile
- windows下使用gcc编译boost库
- windows下使用gcc编译boost库
- ubuntu下使用脚本交叉编译windows下使用的ffmpeg + X264
- linux与Windows使用编译区别及makefile文件编写
- windows 下使用gcc编译. c文件的实现方法。
- Linux GCC 开发入门(一) -- 使用makefile 命令行编译
- Windows下使用nmake编译C/C++的makefile
- Windows 系统下使用 MinGW + MSYS + GCC 编译 FFMPEG
- windows下使用makefile编译C语言.doc
- 在windows环境下,使用Eclipse和gcc-Linaro工具链,对BeagleBone进行交叉编译和远程部署
- GCC编译,库的编译使用及Makefile
- Windows 系统下使用 MinGW + MSYS + GCC 编译 FFMPEG
- windows下makefile 使用配置以及GCC安装方法
- ubuntu下使用脚本交叉编译windows下使用的ffmpeg
- 在windows环境下,使用Eclipse和gcc-Linaro工具链,对BeagleBone进行交叉编译和远程部署
- 使用gcc编译windows程序