binutils-2.18主控Makefile分析

 

快乐虾

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-gcccc1plus.exe的生成 2008-08-23

bfin-xxx-gccfortran目标的生成( 2008-8-24 )

bfin-xxx-gccjava目标的生成( 2008-8-24 )

bfin-xxx-gccobjc目标的生成( 2008-8-26 )

bfin-xxx-gcccollect2目标的生成( 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌云阁主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值