凌阳科技大学计划论坛

首页 » eCos技术讨论专区 » 新手玩eCos » 菜鸟请教:编译"Hello eCos world"遇到的问题!
Paolo - 2008-5-13 11:54:00
本人是eCos初学者,刚更新了eCosBuildTool工具包,编译"Hello eCos world"遇到问题如下:
    输入make命令,显示为:
make: *** No rule to make target 'output/cyg_user_start.elf' , needed by 'all'.
Stop.
    请问这是什么问题呢?该如何解决?请各位高手帮帮忙!
    我的eCos库为使用工具包中图形编辑工具默认下生成的库default.ecc。makefile文件INSTALL_DIR路径也相应改为:
INSTALL_DIR=/ecos-f/ls/eCos/default-lib/default_install/
应该没有问题啊。另外以前使用老版工具包时我已成功编译了Hello这个例子,可现在用这个新版的为什么不行了?麻烦各位大虾指导!
edababy - 2008-5-13 15:31:00
修改makefile文档:
把其中关于cyg-user_start.elf和cyg_user_start.o的那两行删掉,
编译hello world时没有cyg_user_start.c这个文件。
Paolo - 2008-5-14 10:48:00
按照所说的,把关于cyg-user_start.elf和cyg_user_start.o的那两行删掉,但依然有问题,make后显示为:
make: Nothing to be done for 'all'.
这次是什么问题呢?望高手能继续指教。谢谢!
云里雾里 - 2008-5-14 12:06:00
能不能把你的makefile文件传上来看看.
Paolo - 2008-5-14 15:57:00
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

INSTALL_DIR=/ecos-f/ls/eCos/default-lib/default_install/
OUT_DIR=./output

include $(INSTALL_DIR)/include/pkgconf/ecos.mak

XCC          = $(ECOS_COMMAND_PREFIX)gcc
XCXX          = $(XCC)
XLD          = $(XCC)

CFLAGS        = -I$(INSTALL_DIR)/include
CXXFLAGS      = $(CFLAGS)
LDFLAGS      = -nostartfiles -L$(INSTALL_DIR)/lib -Ttarget.ld

.PHONY: all clean

all: $(OUT_DIR) $(BINFILE) $(OBJFILE)

clean:
    @echo Cleaning...
    @-rm -f $(OUT_DIR)/*

$(OUT_DIR) :
    @-mkdir $(OUT_DIR)

$(OUT_DIR)/%.o: %.c
    @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

$(OUT_DIR)/%.elf: $(OUT_DIR)/% $(INSTALL_DIR)/lib/libextras.a $(INSTALL_DIR)/lib/libtarget.a
    @echo
也希望高手能够给解释一下这些语句都是什么意思。
云里雾里 - 2008-5-15 16:12:00
#呵呵,要加上下边红色部分的两行,没有这两行make时就什么都不做了.所以才显示"make: Nothing to be done for 'all' "

# 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
INSTALL_DIR=/ecos-f/ecos-build/Test_Proj/default_install
OUT_DIR=./output

OBJFILE=$(OUT_DIR)/hello.o

BINFILE=$(OUT_DIR)/hello.elf

include $(INSTALL_DIR)/include/pkgconf/ecos.mak
XCC          = $(ECOS_COMMAND_PREFIX)gcc
XCXX          = $(XCC)
XLD          = $(XCC)
CFLAGS        = -I$(INSTALL_DIR)/include
CXXFLAGS      = $(CFLAGS)
LDFLAGS      = -nostartfiles -L$(INSTALL_DIR)/lib -Ttarget.ld
.PHONY: all clean
all: $(OUT_DIR) $(BINFILE) $(OBJFILE)
clean:
@echo Cleaning...
@-rm -f $(OUT_DIR)/*
$(OUT_DIR) :
@-mkdir $(OUT_DIR)
$(OUT_DIR)/%.o: %.c
@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
$(OUT_DIR)/%.elf: $(OUT_DIR)/% $(INSTALL_DIR)/lib/libextras.a $(INSTALL_DIR)/lib/libtarget.a
@echo
云里雾里 - 2008-5-15 16:58:00
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
leajian - 2008-5-16 10:38:00
楼上正解~~
顶 :-)
Paolo - 2008-5-18 20:52:00
果然高手啊~~多谢指教!受益匪浅!
 1 
查看完整版本: 菜鸟请教:编译"Hello eCos world"遇到的问题!