使っているMakefileを以下に示します。 このMakefileでは、CodeSourcery G++ Liteを使うことを想定しています。 以下、パラメータ一覧です。ちなみに、このMakefileでは同一ディレクトリのCファイル、 ヘッダファイルをすべてコンパイルしてしまいます。 ソースファイルの依存関係を考慮したコンパイルには、 make depend的なものが必要になります。
parameter | information |
---|---|
TARGET | ターゲットファイル名を指定します。 |
OBJDIR | ビルドディレクトリを指定します。 |
DEVICE | デバイス種別(STM32F10X_xx)を指定します。 指定したキーワードはコンパイル時に#defineされます。 |
TOOL_PATH | コンパイラがあるディレクトリを指定します。 |
LDSCRIPT | リンカスクリプトを指定します。 |
以下、Makefile本体です。
#--------------------------------------- # STM32F10x Makefile #--------------------------------------- # デバイスリスト(STMのヘッダ設定用) # # STM32F10X_LD STM32F10X_LD_VL # STM32F10X_MD STM32F10X_MD_VL # STM32F10X_HD STM32F10X_XL STM32F10X_CL TARGET = main OBJDIR = build DEVICE = STM32F10X_MD TOOL_PATH = /usr/local/arm-2010q1/bin/ LDSCRIPT = stm32f10x_flash.ld #--------------------------------------- # ソースファイルのリストアップ A_SRC = $(shell ls *.S 2> /dev/null) A_OBJ = $(A_SRC:%.S=$(OBJDIR)/%.o) HEADERS = $(shell ls *.h 2> /dev/null) C_SRC = $(shell ls *.c 2> /dev/null) C_OBJ = $(C_SRC:%.c=$(OBJDIR)/%.o) C_ASM = $(C_SRC:%.c=%.asm) _TARGET = $(OBJDIR)/$(TARGET) #--------------------------------------- # ツールの定義 CC = $(TOOL_PATH)arm-none-eabi-gcc AR = $(TOOL_PATH)arm-none-eabi-ar LD = $(TOOL_PATH)arm-none-eabi-ld OBJCPY = $(TOOL_PATH)arm-none-eabi-objcopy OBJDMP = $(TOOL_PATH)arm-none-eabi-objdump SIZE = $(TOOL_PATH)arm-none-eabi-size GCC_VER = $(shell $(CC) -dumpversion) #--------------------------------------- # コンパイルオプションとリンカオプションの定義 CFLAGS = -D$(DEVICE) CFLAGS += -mcpu=cortex-m3 -mtune=cortex-m3 -mthumb -Wall -Os LDFLAGS = -nostartfiles -nodefaultlibs -static LDFLAGS += $(CFLAGS) --gc-sections -lm -lc -lgcc -Xlinker #--------------------------------------- # ターゲットの指定 all : build_dir mot hex lst $(C_ASM) build_dir : mkdir -p $(OBJDIR) mot : $(_TARGET).mot hex : $(_TARGET).hex lst : $(_TARGET).lst #--------------------------------------- # モトローラS形式とインテルhex形式に変換 %.mot : %.elf $(OBJCPY) -O srec $< $@ %.hex : %.elf $(OBJCPY) -O ihex $< $@ #--------------------------------------- # オブジェクトファイルの依存関係 $(OBJDIR)/%.o : %.c $(HEADERS) $(CC) $(CFLAGS) -c $< -o $@ $(OBJDIR)/%.o : %.S $(CC) $(CFLAGS) -c $< -o $@ $(_TARGET).elf : $(A_OBJ) $(C_OBJ) $(CC) $(LDFLAGS) $(A_OBJ) $(C_OBJ) \ -Xlinker --print-map >$(_TARGET).map -Xlinker --script $(LDSCRIPT) --output $@ $(SIZE) -Ax $@ $(OBJDIR)/%.asm : %.c $(HEADERS) $(CC) $(CFLAGS) -S $< -o $@ %.lst : %.elf $(OBJDMP) -h -D -S -C -t $< > $@ #--------------------------------------- # プロジェクトファイルの掃除 clean: rm -f $(A_OBJ) $(C_OBJ) $(C_ASM) \ $(_TARGET).map $(_TARGET).lst $(_TARGET).elf $(_TARGET).mot $(_TARGET).hex rmdir $(OBJDIR)