快乐虾
http://blog.csdn.net/lights_joy/
本文适用于
gcc- 4.3.1
configure –target=bfin-uclinux-gnu
Blackfin系列DSP
Cygwin gcc 3.4.4
欢迎转载,但请保留作者信息
在cygwin gcc 3.4.4 环境下构建交叉编译器bfin-uclinux-gcc时,首先执行的是configure –target=bfin-uclinux-gnu命令,然后执行make操作,它将创建host-i686-pc-cygwin/ fixincludes子目录,并调用fixincludes /configure脚本生成Makefile,然后在主控Makefile中调用make生成目标,此时传递进来的目标为all。
本文就是分析这个动态生成的host-i686-pc-cygwin/ fixincludes /Makefile。
all目标的依赖关系为:
all : oneprocess fixinc.sh mkheaders
这个依赖关系定义为:
oneprocess : full-stamp
full-stamp : $(ALLOBJ) $(LIBIBERTY)
$(CC) $(CFLAGS) $(LDFLAGS) -o $(FI) $(ALLOBJ) $(LIBIBERTY)
$(STAMP) $@
在这里LIBIBERTY的定义为:
LIBIBERTY=../libiberty/libiberty.a
因为libiberty.a已经先于此目标生成,这个依赖关系可略过。
而ALLOBJ变量的值则为:
ALLOBJ = fixincl.o fixtests.o fixfixes.o server.o procopen.o /
fixlib.o fixopts.o
在此Makefile中,并没有为这些文件定义显式的规则,只是定义了一个通用的规则:
.c.o:
$(CC) -c $(CFLAGS) $(WARN_CFLAGS) $(CPPFLAGS) $(FIXINC_CFLAGS) $<
在这个规则中,需要注意FIXINC_CFLAGS的定义:
INCLUDES = - I. -I$(srcdir) -I../include -I$(srcdir)/../include
FIXINC_CFLAGS = -DHAVE_CONFIG_H $(INCLUDES)
在生成所需要的.O文件后,oneprocess这段脚本将它们链接成fixincl.exe。然后生成一个full-stamp的内容为空的文件。
FI的定义为:
FI = fixincl.exe
当然,这个目标在vs2005中是无法生成的。
这个目标定义为:
fixinc.sh : fixinc.in mkfixinc.sh Makefile
srcdir="$(srcdir)" $(SHELL) $(srcdir)/mkfixinc.sh $(target)
在这里fixinc.in和mkfixinc.sh都是gcc- 4.3.1 /fixincludes目录下的文件。
这个目标的脚本将在host-i686-pc-cygwin/fixincludes目录下生成一个fixinc.sh的脚本。
这个目标定义为:
mkheaders: mkheaders.almost $(srcdir)/../gcc/BASE-VER
sed -e 's/@gcc_version@/$(gcc_version)/' < $< > $@T
mv -f $@T $@
mkheaders.almost: $(srcdir)/mkheaders.in config.status
CONFIG_FILES=mkheaders.almost:mkheaders.in /
CONFIG_HEADERS= ./config.status
这个目标的脚本将在host-i686-pc-cygwin/fixincludes目录下生成一个mkheaders的脚本。
host-i686-pc-cygwin/libiberty/Makefile解析( 2008-8-19 )