| 
 
| Liuweifeng168(技术刘) liuweifeng168@126.com
 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)
 
 
 | 
 |