有朋友用makefile来批处理arm程序的吗
[复制链接]
最近在工作中常常需要用到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)
|