注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
05210324kw的个人空间 https://home.eeworld.com.cn/space-uid-160232.html [收藏] [复制] [分享] [RSS]
日志

有朋友用makefile来批处理arm程序的吗

已有 3572 次阅读2010-9-24 21:08

最近在工作中常常需要用到Makefile来编译和链接arm程序,但是现在我还是无法脱离集成开发环境,希望高手指点指点,


以下是我找到的一个比较经典的make,但是还没有完全将它的意思弄清楚,希望高手指点


 


 


#Makefile文件涉及的语法众多,如果每一个工程都分别写一个makefile文件,既费时又费力,而且写出来的文件不一定正确。此文介绍的是基于RVDS4.0(讨厌的Eclipse)开发软件的可共用的makefile文件,用户不需要了解太多的makefile语法,甚至不需要任何修改就可以进行编译链接。具体的使用方法如下。
#Step 1:把写好的汇编/C程序(不包括cpp程序)copy到新建个src文件夹中;
#Sterp 2:打开makefile文件(使用记事本或者写字板都可以);
#Step 3:在“CPU_FLAG = ARM7TDMI”选择你所使用的ARM核的类型,如,你使用的是ARM920T,那么你就要在改为“CPU_FLAG = ARM920T”;
#Step 4:在“ISA_FLAG = __DEBUG_RAM”中修改你的预定义,如果没有预定义,可不修改此处,相应的如果你在程序中使用了预定义“__DEBUG_FLASH”,那么此处要修改为“ISA_FLAG = __DEBUG_FLASH”;
#Step5:在“OPT_LEVEL = 0”处修改优化等级,0——3共4个等级;
##Step6:在“OPT_TIME_SPACE = time”处修改空间优化还是时间优化,如选择空间优化,可改为“OPT_TIME_SPACE = space”;
#Step7:在“ADDR_ENTRY = 0x40000000”处修改程序的入口地址,如果程序的入口地址是0x00,则此处改为“ADDR_ENTRY = 0x00”;##Step8:在“SCAT = scatter_mem.scat”处选择分散加载文件,如,分散加载文件(必须在src文件夹中)的文件名是scatter.scat,那么此处修改为“SCAT = scatter.scat”;
#Step9:这里是基于ARM指令,使用C和汇编进行编程的一些常用设置,如果想使用THUMB指令或者是使用CPP语言或者是想进一步设置,可在具体的地方加些其他的指令;
#Step10:打开DOS命令进入src文件夹所在的目录,使用make命令可生成映像文件main.axf,使用make bin命令可生成可执行的main.bin文件,使用make
#clean命令可把make生成的文件全部删除;
#Step11:可以在生成的locator.txt文件中查看执行的结果等等。



附:makefile文件


# This is a makefile by Liu Weifeng 2009/08/27


CC=armcc
AS=armasm
LD=armlink
AR=armar
FE=fromelf


SRC_DIR = src
OBJ_DIR = obj
CPU_FLAG = ARM7TDMI
ISA_FLAG = __DEBUG_RAM
DEBUG_FLAG = -g
OPT_LEVEL = 0
OPT_TIME_SPACE = time
ADDR_ENTRY = 0x40000000
SCAT = scatter_mem.scat
CFLAGS = $(DEBUG_FLAG) -Otime -O$(OPT_LEVEL) --cpu $(CPU_FLAG) -D$(ISA_FLAG) $(INCLUDES)
AFLAGS = $(DEBUG_FLAG) --cpu $(CPU_FLAG) #--apcs /interwork
LFLAGS = --list=locator.txt --scatter $(SRC_DIR)/$(SCAT) --entry $(ADDR_ENTRY) --info=sizes --info=totals
AXF_FILE = main.axf
BIN_FILE = main.bin
INCLUDES = -I$(SRC_DIR) #\
   #-I$(SRC_DIR)/arm \ #
   #-I$(SRC_DIR)/arm/lib
CSRC := $(wildcard $(SRC_DIR)/*.c)
ASRC := $(wildcard $(SRC_DIR)/*.s)
OBJ_FILES := $(CSRC(SRC_DIR)/%.c=$(OBJ_DIR)/%.o) $(ASRC(SRC_DIR)/%.s=$(OBJ_DIR)/%.o)
DEP_FILES := $(OBJ_FILES:%=%.d)
ifeq ($(OS),Windows_NT)
RM_FILE = del /q
RM_DIR = rmdir /s /q
MK_DIR = mkdir
else
RM_FILE = /bin/rm -f
RM_DIR = /bin/rm -rf
MK_DIR = /bin/mkdir -p
endif
.phony: all clean bin
all: $(AXF_FILE)
$(AXF_FILE): $(OBJ_DIR) $(OBJ_FILES) $(SRC_DIR)/$(SCAT)
$(LD) $(LFLAGS) --output $@ $(OBJ_FILES)
clean:
- $(RM_DIR) $(OBJ_DIR)
- $(RM_FILE) $(AXF_FILE)
- $(RM_FILE) $(BIN_FILE)
- $(RM_FILE) locator.txt
bin: $(AXF_FILE)
$(FE) --bin $(AXF_FILE) -o $(BIN_FILE)
$(OBJ_DIR):
$(MK_DIR) $(OBJ_DIR)
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.c makefile
$(CC) $(CFLAGS) -c [email=--depend=$@.d]--depend=$@.d[/email] --depend_format=unix_escaped --no_depend_system_headers -o $@ $<
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.s makefile
$(AS) $(AFLAGS) [email=--depend=$@.d]--depend=$@.d[/email] --depend_format=unix_escaped -o $@ $<
-include $(DEP_FILES)
 

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章