快乐虾
http://blog.csdn.net/lights_joy/
lights@hb165.com
本文适用于
binutils-2.18
configure –target=bfin-uclinux-gnu
Blackfin系列DSP
Cygwin gcc 3.4.4
欢迎转载,但请保留作者信息
1 主控Makefile
1.1 configure脚本生成的文件
在make之前应该首先用configure进行编译参数的配置,经过这个脚本之后,会生成一些新的文件:
binutils-2.18/
config.log:记录configure脚本的所有形为。
Makefile:这个文件由Makefile.in生成,configure替换了其中的一些变量。
config.status:这个脚本用于重新生成当前的一些配置。
1.2 all
在Makefile中的第一个目标就是all:
# The first rule in the file had better be this one. Don't put any above it.
# This lives here to allow makefile fragments to contain dependencies.
all:
但是这里并没有直接给出依赖关系,再往下看:
# The target built for a native non-bootstrap build.
.PHONY: all
all:
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
if [ -f stage_last ]; then /
$(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target; /
else /
$(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target; /
fi
从这个依赖关系可以看出,当检测到Makefile文件的改变时,它将重新生成一个Makefile文件,并调用config.status这个脚本进行编译环境的检测。这从Makefile目标中可以看出来:
# Rebuilding Makefile.
Makefile: $(srcdir)/Makefile.in config.status
CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
config.status: configure
CONFIG_SHELL="$(SHELL)" $(SHELL) ./config.status --recheck
由于stage_last文件不存在,因此直接执行
$(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target;
1.3 all-host
这个目标将在生成all目标时生成。它的依赖关系为:
.PHONY: all-host
all-host: maybe-all-ash #空目标
all-host: maybe-all-autoconf #空目标
all-host: maybe-all-automake #空目标
all-host: maybe-all-bash #空目标
all-host: maybe-all-bfd
all-host: maybe-all-opcodes
all-host: maybe-all-binutils
all-host: maybe-all-bison #空目标
all-host: maybe-all-byacc #空目标
all-host: maybe-all-bzip2 #空目标
all-host: maybe-all-dejagnu #空目标
all-host: maybe-all-diff #空目标
all-host: maybe-all-dosutils #空目标
all-host: maybe-all-etc
all-host: maybe-all-fastjar #空目标
all-host: maybe-all-fileutils #空目标
all-host: maybe-all-findutils #空目标
all-host: maybe-all-find #空目标
all-host: maybe-all-fixincludes #空目标
all-host: maybe-all-flex #空目标
all-host: maybe-all-gas
all-host: maybe-all-gawk #空目标
all-host: maybe-all-gettext #空目标
all-host: maybe-all-gnuserv #空目标
all-host: maybe-all-gprof
all-host: maybe-all-gzip #空目标
all-host: maybe-all-hello #空目标
all-host: maybe-all-indent #空目标
all-host: maybe-all-intl
all-host: maybe-all-tcl #空目标
all-host: maybe-all-itcl #空目标
all-host: maybe-all-ld
all-host: maybe-all-libgui #空目标
all-host: maybe-all-libiberty
all-host: maybe-all-libtool #空目标
all-host: maybe-all-m4 #空目标
all-host: maybe-all-make #空目标
all-host: maybe-all-mmalloc #空目标
all-host: maybe-all-patch #空目标
all-host: maybe-all-perl #空目标
all-host: maybe-all-prms #空目标
all-host: maybe-all-rcs #空目标
all-host: maybe-all-readline #空目标
all-host: maybe-all-release #空目标
all-host: maybe-all-recode #空目标
all-host: maybe-all-sed #空目标
all-host: maybe-all-send-pr #空目标
all-host: maybe-all-shellutils #空目标
all-host: maybe-all-sid #空目标
all-host: maybe-all-sim #空目标
all-host: maybe-all-tar #空目标
all-host: maybe-all-texinfo #空目标
all-host: maybe-all-textutils #空目标
all-host: maybe-all-time #空目标
all-host: maybe-all-uudecode #空目标
all-host: maybe-all-wdiff #空目标
all-host: maybe-all-zip #空目标
all-host: maybe-all-gdb #空目标
all-host: maybe-all-expect #空目标
all-host: maybe-all-guile #空目标
all-host: maybe-all-tk #空目标
all-host: maybe-all-libtermcap #空目标
all-host: maybe-all-utils #空目标
all-host: maybe-all-gnattools #空目标
因而有如下的依赖关系。
1.3.1 maybe-all-bfd
这条规则定义为:
.PHONY: all-bfd maybe-all-bfd
maybe-all-bfd:
TARGET-bfd=all
maybe-all-bfd: all-bfd
all-bfd: configure-bfd
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
$(HOST_EXPORTS) /
(cd $(HOST_SUBDIR)/bfd && /
$(MAKE) $(FLAGS_TO_PASS) $(TARGET-bfd))
再往下还有依赖关系:
all-bfd: maybe-all-libiberty
all-bfd: maybe-all-intl
在生成所依赖的目标后,进入bfd目录,执行make操作。这个make操作将在bfd目录下生成libbfd.a。此部分的详细分析参见《binutils makefile研究-libbfd.doc》。
1.3.1.1 configure-bfd
这条规则定义为:
.PHONY: configure-bfd maybe-configure-bfd
maybe-configure-bfd:
maybe-configure-bfd: configure-bfd
configure-bfd:
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
test ! -f $(HOST_SUBDIR)/bfd/Makefile || exit 0; /
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd ; /
$(HOST_EXPORTS) /
echo Configuring in $(HOST_SUBDIR)/bfd; /
cd "$(HOST_SUBDIR)/bfd" || exit 1; /
case $(srcdir) in /
/* | [A-Za-z]:[///]*) topdir=$(srcdir) ;; /
*) topdir=`echo $(HOST_SUBDIR)/bfd/ | /
sed -e 's,/./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; /
esac; /
srcdiroption="--srcdir=$${topdir}/bfd"; /
libsrcdir="$$s/bfd"; /
$(SHELL) $${libsrcdir}/configure /
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} /
--target=${target_alias} $${srcdiroption} /
|| exit 1
再往下还有依赖关系:
configure-bfd: configure-libiberty
configure-bfd: maybe-configure-intl
这段脚本将进入bfd目录,并执行其configure脚本,其结果将在bfd子目录下创建以下几个文件:
config.log
bfd_stdint.h
libtool
stamp-h1
config.h
bfd-in3.h
Makefile
config.status
config.cache
doc/Makefile
po/Makefile
po/Makefile.in
1.3.1.1.1 configure-libiberty
这条规则定义为:
.PHONY: configure-libiberty maybe-configure-libiberty
maybe-configure-libiberty:
maybe-configure-libiberty: configure-libiberty
configure-libiberty:
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; /
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty ; /
$(HOST_EXPORTS) /
echo Configuring in $(HOST_SUBDIR)/libiberty; /
cd "$(HOST_SUBDIR)/libiberty" || exit 1; /
case $(srcdir) in /
/* | [A-Za-z]:[///]*) topdir=$(srcdir) ;; /
*) topdir=`echo $(HOST_SUBDIR)/libiberty/ | /
sed -e 's,/./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; /
esac; /
srcdiroption="--srcdir=$${topdir}/libiberty"; /
libsrcdir="$$s/libiberty"; /
$(SHELL) $${libsrcdir}/configure /
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} /
--target=${target_alias} $${srcdiroption} /
|| exit 1
这段脚本将进入libiberty目录,并执行其configure脚本,其结果将在libiberty子目录下创建以下几个文件:
config.log
stamp-h
config.h
Makefile
config.status
config.cache
xhost-mkfrag
1.3.1.1.2 maybe-configure-intl
这条规则定义为:
.PHONY: configure-intl maybe-configure-intl
maybe-configure-intl:
maybe-configure-intl: configure-intl
configure-intl:
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
test ! -f $(HOST_SUBDIR)/intl/Makefile || exit 0; /
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl ; /
$(HOST_EXPORTS) /
echo Configuring in $(HOST_SUBDIR)/intl; /
cd "$(HOST_SUBDIR)/intl" || exit 1; /
case $(srcdir) in /
/* | [A-Za-z]:[///]*) topdir=$(srcdir) ;; /
*) topdir=`echo $(HOST_SUBDIR)/intl/ | /
sed -e 's,/./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; /
esac; /
srcdiroption="--srcdir=$${topdir}/intl"; /
libsrcdir="$$s/intl"; /
$(SHELL) $${libsrcdir}/configure /
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} /
--target=${target_alias} $${srcdiroption} /
|| exit 1
直接执行这段脚本,它将进入intl目录,并执行其configure脚本,结果是在intl目录下生成几个新文件:
config.log
config.h
config.intl
Makefile
config.status
config.cache
1.3.1.2 maybe-all-libiberty
这条规则定义为:
.PHONY: all-libiberty maybe-all-libiberty
maybe-all-libiberty:
TARGET-libiberty=all
maybe-all-libiberty: all-libiberty
all-libiberty: configure-libiberty
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
$(HOST_EXPORTS) /
(cd $(HOST_SUBDIR)/libiberty && /
$(MAKE) $(FLAGS_TO_PASS) $(TARGET-libiberty))
它所依赖的目标configure-libiberty已经生成,直接执行这段脚本,它将进入libiberty子目录并执行make操作,结果将在libiberty目录下生成libiberty.a这个静态库文件。此部分的详细分析参见《binutils makefile研究-libiberty.doc》。
1.3.1.3 maybe-all-intl
这条规则定义为:
.PHONY: all-intl maybe-all-intl
maybe-all-intl:
TARGET-intl=all
maybe-all-intl: all-intl
all-intl: configure-intl
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
$(HOST_EXPORTS) /
(cd $(HOST_SUBDIR)/intl && /
$(MAKE) $(FLAGS_TO_PASS) $(TARGET-intl))
它所依赖的目标configure-intl已经生成,直接执行这段脚本,它将进入intl子目录并执行make操作,但是intl/Makefile实际上什么也没做。
1.3.2 maybe-all-opcodes
这条规则定义为:
.PHONY: all-opcodes maybe-all-opcodes
maybe-all-opcodes:
TARGET-opcodes=all
maybe-all-opcodes: all-opcodes
all-opcodes: configure-opcodes
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
$(HOST_EXPORTS) /
(cd $(HOST_SUBDIR)/opcodes && /
$(MAKE) $(FLAGS_TO_PASS) $(TARGET-opcodes))
此外还有
all-opcodes: maybe-all-bfd
all-opcodes: maybe-all-libiberty
all-opcodes: maybe-all-intl
除configure-opcodes目标外,所有目标均已生成,因而这个目标依赖于configure-opcodes的实现,在configure-opcodes实现后,上述脚本将进入opcodes目录并执行make all操作。其结果是在opcodes目录下生成libopcodes.a这个静态库。详细过程参见《binutils makefile研究-opcodes.doc》。
1.3.2.1 configure-opcodes
这条规则定义为:
.PHONY: configure-opcodes maybe-configure-opcodes
maybe-configure-opcodes:
maybe-configure-opcodes: configure-opcodes
configure-opcodes:
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
test ! -f $(HOST_SUBDIR)/opcodes/Makefile || exit 0; /
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes ; /
$(HOST_EXPORTS) /
echo Configuring in $(HOST_SUBDIR)/opcodes; /
cd "$(HOST_SUBDIR)/opcodes" || exit 1; /
case $(srcdir) in /
/* | [A-Za-z]:[///]*) topdir=$(srcdir) ;; /
*) topdir=`echo $(HOST_SUBDIR)/opcodes/ | /
sed -e 's,/./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; /
esac; /
srcdiroption="--srcdir=$${topdir}/opcodes"; /
libsrcdir="$$s/opcodes"; /
$(SHELL) $${libsrcdir}/configure /
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} /
--target=${target_alias} $${srcdiroption} /
|| exit 1
此外还有:
configure-opcodes: maybe-configure-intl
因此直接执行上述脚本,它将进入opcodes目录,并执行configure脚本,其结果是在opcodes子目录下生成一些新的文件:
config.log
libtool
stamp-h1
config.h
Makefile
config.status
config.cache
1.3.3 maybe-all-binutils
这条规则定义为:
.PHONY: all-binutils maybe-all-binutils
maybe-all-binutils:
TARGET-binutils=all
maybe-all-binutils: all-binutils
all-binutils: configure-binutils
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
$(HOST_EXPORTS) /
(cd $(HOST_SUBDIR)/binutils && /
$(MAKE) $(FLAGS_TO_PASS) $(TARGET-binutils))
此外还有:
all-binutils: maybe-all-libiberty
all-binutils: maybe-all-opcodes
all-binutils: maybe-all-bfd
all-binutils: maybe-all-build-flex #空目标
all-binutils: maybe-all-build-bison #空目标
all-binutils: maybe-all-build-byacc #空目标
all-binutils: maybe-all-intl
因而此目标的生成仅依赖于configure-binutils。在configure-binutils完成后,上述脚本将进入binutils目录并执行make all操作,其结果是在binutils目录下生成一些应用工具文件。详细过程参见《binutils makefile研究-binutils.doc》
1.3.3.1 configure-binutils
这条规则定义为:
.PHONY: configure-binutils maybe-configure-binutils
maybe-configure-binutils:
maybe-configure-binutils: configure-binutils
configure-binutils:
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
test ! -f $(HOST_SUBDIR)/binutils/Makefile || exit 0; /
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils ; /
$(HOST_EXPORTS) /
echo Configuring in $(HOST_SUBDIR)/binutils; /
cd "$(HOST_SUBDIR)/binutils" || exit 1; /
case $(srcdir) in /
/* | [A-Za-z]:[///]*) topdir=$(srcdir) ;; /
*) topdir=`echo $(HOST_SUBDIR)/binutils/ | /
sed -e 's,/./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; /
esac; /
srcdiroption="--srcdir=$${topdir}/binutils"; /
libsrcdir="$$s/binutils"; /
$(SHELL) $${libsrcdir}/configure /
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} /
--target=${target_alias} $${srcdiroption} /
|| exit 1
这段脚本将进入binutils目录,并执行这个目录下的configure脚本,其结果是在这个目录下生成一些新的文件:
config.log
libtool
stamp-h1
config.h
Makefile
config.status
config.cache
1.3.4 maybe-all-etc
这条规则定义为:
.PHONY: all-etc maybe-all-etc
maybe-all-etc:
TARGET-etc=all
maybe-all-etc: all-etc
all-etc: configure-etc
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
$(HOST_EXPORTS) /
(cd $(HOST_SUBDIR)/etc && /
$(MAKE) $(FLAGS_TO_PASS) $(TARGET-etc))
它依赖于configure-etc,在configure-etc生成后,上述脚本将进入etc子目录并执行make all操作,此操作的结果将是根据需要重新生成一些简单的文档,在此不做说明。
1.3.4.1 configure-etc
这条规则定义为:
.PHONY: configure-etc maybe-configure-etc
maybe-configure-etc:
maybe-configure-etc: configure-etc
configure-etc:
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
test ! -f $(HOST_SUBDIR)/etc/Makefile || exit 0; /
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/etc ; /
$(HOST_EXPORTS) /
echo Configuring in $(HOST_SUBDIR)/etc; /
cd "$(HOST_SUBDIR)/etc" || exit 1; /
case $(srcdir) in /
/* | [A-Za-z]:[///]*) topdir=$(srcdir) ;; /
*) topdir=`echo $(HOST_SUBDIR)/etc/ | /
sed -e 's,/./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; /
esac; /
srcdiroption="--srcdir=$${topdir}/etc"; /
libsrcdir="$$s/etc"; /
$(SHELL) $${libsrcdir}/configure /
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} /
--target=${target_alias} $${srcdiroption} /
|| exit 1
这段脚本将进入etc子目录,并执行子目录下的configure脚本,其结果将生成以下几个文件:
config.log
config.status
config.cache
Makefile
1.3.5 maybe-all-gas
这条规则定义为:
.PHONY: all-gas maybe-all-gas
maybe-all-gas:
TARGET-gas=all
maybe-all-gas: all-gas
all-gas: configure-gas
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
$(HOST_EXPORTS) /
(cd $(HOST_SUBDIR)/gas && /
$(MAKE) $(FLAGS_TO_PASS) $(TARGET-gas))
再往下还有:
all-gas: maybe-all-libiberty
all-gas: maybe-all-opcodes
all-gas: maybe-all-bfd
all-gas: maybe-all-intl
除configure-gas外,其余目标均已经生成,故先执行configure-gas创建makefile,然后再进入gas子目录,并在其中执行make all操作。其结果是生成as.exe。
1.3.5.1 configure-gas
这条规则定义为:
.PHONY: configure-gas maybe-configure-gas
maybe-configure-gas:
maybe-configure-gas: configure-gas
configure-gas:
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
test ! -f $(HOST_SUBDIR)/gas/Makefile || exit 0; /
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas ; /
$(HOST_EXPORTS) /
echo Configuring in $(HOST_SUBDIR)/gas; /
cd "$(HOST_SUBDIR)/gas" || exit 1; /
case $(srcdir) in /
/* | [A-Za-z]:[///]*) topdir=$(srcdir) ;; /
*) topdir=`echo $(HOST_SUBDIR)/gas/ | /
sed -e 's,/./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; /
esac; /
srcdiroption="--srcdir=$${topdir}/gas"; /
libsrcdir="$$s/gas"; /
$(SHELL) $${libsrcdir}/configure /
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} /
--target=${target_alias} $${srcdiroption} /
|| exit 1
这段脚本将进入gas子目录,并在这个子目录中执行configure脚本,执行的结果是在gas子目录下创建以下文件:
config.log
targ-env.h
targ-cpu.h
obj-format.h
itbl-cpu.h
libtool
stamp-h1
config.h
Makefile
.gdbinit
config.status
config.cache
1.3.6 maybe-all-gprof
这条规则定义为:
.PHONY: all-gprof maybe-all-gprof
maybe-all-gprof:
TARGET-gprof=all
maybe-all-gprof: all-gprof
all-gprof: configure-gprof
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
$(HOST_EXPORTS) /
(cd $(HOST_SUBDIR)/gprof && /
$(MAKE) $(FLAGS_TO_PASS) $(TARGET-gprof))
再往下还有:
all-gprof: maybe-all-libiberty
all-gprof: maybe-all-bfd
all-gprof: maybe-all-opcodes
all-gprof: maybe-all-intl
除configure-gprof目标外,其余目标均已经生成,因此先执行configure-gprof目标生成Makefile,然后这段脚本将进入gprof目录并执行make all操作。其结果就是生成gprof.exe文件。
1.3.6.1 configure-gprof
这条规则定义为:
.PHONY: configure-gprof maybe-configure-gprof
maybe-configure-gprof:
maybe-configure-gprof: configure-gprof
configure-gprof:
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
test ! -f $(HOST_SUBDIR)/gprof/Makefile || exit 0; /
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gprof ; /
$(HOST_EXPORTS) /
echo Configuring in $(HOST_SUBDIR)/gprof; /
cd "$(HOST_SUBDIR)/gprof" || exit 1; /
case $(srcdir) in /
/* | [A-Za-z]:[///]*) topdir=$(srcdir) ;; /
*) topdir=`echo $(HOST_SUBDIR)/gprof/ | /
sed -e 's,/./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; /
esac; /
srcdiroption="--srcdir=$${topdir}/gprof"; /
libsrcdir="$$s/gprof"; /
$(SHELL) $${libsrcdir}/configure /
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} /
--target=${target_alias} $${srcdiroption} /
|| exit 1
这段脚本将进入gprof目录并执行其configure脚本,执行的结果将在gprof目录下创建以下几个文件:
config.log
libtool
stamp-h1
gconfig.h
config.status
config.cache
Makefile
1.3.7 maybe-all-intl
此目标之前已经生成,略过。
1.3.8 maybe-all-ld
这条规则定义为:
.PHONY: all-ld maybe-all-ld
maybe-all-ld:
TARGET-ld=all
maybe-all-ld: all-ld
all-ld: configure-ld
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
$(HOST_EXPORTS) /
(cd $(HOST_SUBDIR)/ld && /
$(MAKE) $(FLAGS_TO_PASS) $(TARGET-ld))
再往下还有:
all-ld: maybe-all-libiberty
all-ld: maybe-all-bfd
all-ld: maybe-all-opcodes
all-ld: maybe-all-build-bison
all-ld: maybe-all-build-byacc
all-ld: maybe-all-build-flex
all-ld: maybe-all-intl
除configure-ld目标外,其余目标均已经生成或者是空目标,因此先执行configure-ld目标生成Makefile,然后这段脚本将进入ld目录并执行make all操作。其结果就是生成ld-new.exe这个文件。
1.3.8.1 configure-ld
这条规则定义为:
.PHONY: configure-ld maybe-configure-ld
maybe-configure-ld:
maybe-configure-ld: configure-ld
configure-ld:
@r=`${PWD_COMMAND}`; export r; /
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; /
test ! -f $(HOST_SUBDIR)/ld/Makefile || exit 0; /
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld ; /
$(HOST_EXPORTS) /
echo Configuring in $(HOST_SUBDIR)/ld; /
cd "$(HOST_SUBDIR)/ld" || exit 1; /
case $(srcdir) in /
/* | [A-Za-z]:[///]*) topdir=$(srcdir) ;; /
*) topdir=`echo $(HOST_SUBDIR)/ld/ | /
sed -e 's,/./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; /
esac; /
srcdiroption="--srcdir=$${topdir}/ld"; /
libsrcdir="$$s/ld"; /
$(SHELL) $${libsrcdir}/configure /
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} /
--target=${target_alias} $${srcdiroption} /
|| exit 1
这段脚本将进入ld目录并执行其configure脚本,执行的结果将在ld目录下创建以下几个文件:
config.log
libtool
stamp-h1
config.h
tdirs
config.status
config.cache
Makefile
1.3.9 all-host: maybe-all-libiberty
此目标之前已经生成,略过。
1.4 all-target
.PHONY: all-target
all-target: maybe-all-target-libstdc++-v3 #空目标
all-target: maybe-all-target-libmudflap #空目标
all-target: maybe-all-target-libssp #空目标
all-target: maybe-all-target-newlib #空目标
all-target: maybe-all-target-libgfortran #空目标
all-target: maybe-all-target-libobjc #空目标
all-target: maybe-all-target-libtermcap #空目标
all-target: maybe-all-target-winsup #空目标
all-target: maybe-all-target-libgloss #空目标
all-target: maybe-all-target-libiberty #空目标
all-target: maybe-all-target-gperf #空目标
all-target: maybe-all-target-examples #空目标
all-target: maybe-all-target-libffi #空目标
all-target: maybe-all-target-libjava #空目标
all-target: maybe-all-target-zlib #空目标
all-target: maybe-all-target-boehm-gc #空目标
all-target: maybe-all-target-qthreads #空目标
all-target: maybe-all-target-rda #空目标
all-target: maybe-all-target-libada #空目标
all-target: maybe-all-target-libgomp #空目标
2 参考资料
host-i686-pc-cygwin/libiberty/Makefile解析( 2008-8-19 )
host-i686-pc-cygwin/fixincludes/Makefile分析( 2008-8-19 )
host-i686-pc-cygwin/zlib/Makefile分析( 2008-8-19 )
host-i686-pc-cygwin/libcpp/Makefile分析( 2008-8-19 )
host-i686-pc-cygwin/libdecnumber/Makefile分析( 2008-8-19 )
bfin-xxx-gcc中cc1plus.exe的生成( 2008-08-23 )
bfin-xxx-gcc中fortran目标的生成( 2008-8-24 )
bfin-xxx-gcc中java目标的生成( 2008-8-24 )
bfin-xxx-gcc中objc目标的生成( 2008-8-26 )
bfin-xxx-gcc中collect2目标的生成( 2008-8-26 )
binutils-2.18/binutils/Makefile分析( 2008-8-29 )
binutils-2.18/gas/Makefile分析( 2008-8-29 )
binutils-2.18/gprof/Makefile分析( 2008-8-29 )
binutils-2.18/ld/Makefile分析( 2008-8-30 )