Makefile说明:# Originally written by Jonathan Larmour, Red Hat, Inc.
# Modify by lijian (@Sunnorth) for easy building.
# This file is in the public domain and may be used for any purpose
#用eCosconfigtool 编译生成的 eCos库路径INSTALL_DIR=/ecos-f/ecos-build/Test_Proj/default_install
#输出目录OUT_DIR=./output
#变量定义OBJFILE=$(OUT_DIR)/cyg_user_start.o
BINFILE=$(OUT_DIR)/cyg_user_start.elf
# 包含ecos.mak这个文件,它定义了应用程序需要的一些变量和规则
# 比如下边用到的“ECOS_COMMAND_PREFIX”就在ecos.mak上定义,有兴趣可以看看ecos.mak的内容include $(INSTALL_DIR)/include/pkgconf/ecos.mak
#定义一些变量,并给其赋值,这里是指明编译程序所使用的编译工具为"score-elf-gcc"XCC = $(ECOS_COMMAND_PREFIX)gcc
XCXX = $(XCC)
XLD = $(XCC)
#用于C C++ 和linker的额外标志 ,一些参数CFLAGS = -I$(INSTALL_DIR)/include
CXXFLAGS = $(CFLAGS)
LDFLAGS = -nostartfiles -L$(INSTALL_DIR)/lib -Ttarget.ld
#这句声明 all 和 clean为虚拟目标,而不是文件,如果没有这句make则会当all(或clean)为一个文件而去找这个文件,
#加上".PHONY:"后,make就不会去找all(或clean)这样一个文件了,而上直接找下边这个“all(或clean)”目标.PHONY: all clean
#作为第一个出现的目标项目,Make会将它作为主要和缺省项目("make"就表示"make all")
#当执行make时,调用$(OUT_DIR)、$(BINFILE)、$(OBJFILE)函数,在OUT_DIR所指定的目
#录下生成BINFILE、OBJFILE所指定的文件all: $(OUT_DIR) $(BINFILE) $(OBJFILE)
#当执行"make clean"命令时删除 $(OUT_DIR)/目录下的所有文件clean:
@echo Cleaning...
@-rm -f $(OUT_DIR)/*
#makefile中的函数定义,在makefile中函数和变量的形式相似$(OUT_DIR) :
#执行make时会根据 “all"中的$(OUT_DIR)和OUT_DIR的定义来调用这个函数
@-mkdir $(OUT_DIR)
$(OUT_DIR)/%.o: %.c
#执行make时会根据 “all"中的$(OBJFILE)和OBJFILE的定义来调用这个函数
@echo
@echo "Compiling $@..."
@$(XCC) -c -o $(OUT_DIR)/$*.o $(CFLAGS) $(ECOS_GLOBAL_CFLAGS) $<
$(OUT_DIR)/%.o: %.cxx
@echo
@echo "Compiling $@..."
@$(XCXX) -c -o $(OUT_DIR)/$*.o $(CXXFLAGS) $(ECOS_GLOBAL_CFLAGS) $<
$(OUT_DIR)/%.o: %.C
@echo
@echo "Compiling $@..."
@$(XCXX) -c -o $(OUT_DIR)/$*.o $(CXXFLAGS) $(ECOS_GLOBAL_CFLAGS) $<
$(OUT_DIR)/%.o: %.cc
@echo
@echo "Compiling $@..."
@$(XCXX) -c -o $(OUT_DIR)/$*.o $(CXXFLAGS) $(ECOS_GLOBAL_CFLAGS) $<
$(OUT_DIR)/%: $(OUT_DIR)/%.o
@echo "Generating $@..."
@$(XLD) $(LDFLAGS) $(ECOS_GLOBAL_LDFLAGS) -o
$@.elf $@.o#执行make时会根据 “all"中的$(BINFILE)和BINFILE的定义来调用这个函数$(OUT_DIR)/%.elf: $(OUT_DIR)/% $(INSTALL_DIR)/lib/libextras.a $(INSTALL_DIR)/lib/libtarget.a
@echo
关于makefile的一些详细信息请参考“跟我一起写makefile”:http://bbs.unsp.com/attachment.aspx?attachmentid=330