На примере makefile для STM32L покажем как писать makefile для ARM cortex-m3.
NOTE: У вас уже должен быть установлен cross компилятор для ARM, например отсюда: GNU Tools for ARM Embedded Processors —https://launchpad.net/gcc-arm-embedded. А директория компилятора добавлена в список путей переменной PATH.
Как и в первой части, наш проект:
Project
* main.c
* System
* stm32l152rb.ld
* Src
* system_stm32l1xx.c
* startup_stm32l1xx_md.s
* Inc
* core_cm3.h
* core_cmFunc.h
* core_cmInstr.h
* stm32l1xx.h
* system_stm32l1xx.h
Привожу Makefile без пояснений — если вы читали часть 1 и имеете хоть какое-то представление о make синтаксисе, то все должно быть понятно.
########################################################################
CC=/home/sasha/ARMTollChain/gcc-arm-none-eabi-4_9-2014q4/bin/arm-none-eabi-gcc
LD=/home/sasha/ARMTollChain/gcc-arm-none-eabi-4_9-2014q4/bin/arm-none-eabi-gcc
CP=/home/sasha/ARMTollChain/gcc-arm-none-eabi-4_9-2014q4/bin/arm-none-eabi-objcopy
########################################################################
LDSCRIPT=-T/home/sasha/Project_X/NewGenSTM32/start_make/System/stm32l152rb.ld
########################################################################
INC+=-I/home/sasha/Project_X/NewGenSTM32/start_make/System/Inc
SRC+=/home/sasha/Project_X/NewGenSTM32/start_make/main.c
SRC+=/home/sasha/Project_X/NewGenSTM32/start_make/System/Src/system_stm32l1xx.c
ASM+=/home/sasha/Project_X/NewGenSTM32/start_make/System/Src/startup_stm32l1xx_md.s
#######################################################################
OBJ=$(SRC:%.c=%.o)
OBJ+=$(ASM:%.s=%.o)
#######################################################################
CFLAGS += -mcpu=cortex-m3
CFLAGS += -mlittle-endian
CFLAGS += -mthumb
CFLAGS += -g
CFLAGS += $(INC)
LDFLAGS += -mcpu=cortex-m3
LDFLAGS += -mlittle-endian
LDFLAGS += -mthumb
LDFLAGS += $(LDSCRIPT)
LDFLAGS += -Wl,--gc-section
######################################################################
all: start
@echo "\n"
@echo "END"
start: main.elf
@echo "\n"
@echo "OUT"
@echo "********************************************************"
$(CP) -Oihex main.elf main.hex
@echo "********************************************************"
main.elf: $(OBJ)
@echo "\n"
@echo "LINK"
@echo "********************************************************"
$(LD) $(LDFLAGS) $(OBJ) -o main.elf
@echo "********************************************************"
%.o: %.c
@echo "\n"
@echo "COMPILE C"
@echo "********************************************************"
$(CC) $(CFLAGS) -c $< -o $@
@echo "********************************************************"
%.o: %.s
@echo "\n"
@echo "COMPILE S"
@echo "********************************************************"
$(CC) $(CFLAGS) -c $< -o $@
@echo "********************************************************"
clean:
rm -f $(OBJ) main.elf main.hex
Ссылка на скачивание примера — start_make.tar.