binutils中ar.exe的生成

本文详细解析了Binutils中ar工具的构建过程,包括各目标文件的生成规则及其依赖关系,适合对嵌入式开发及编译原理感兴趣的读者。

 

快乐虾

http://blog.youkuaiyun.com/lights_joy/

lights@hb165.com

 

 

本文适用于

binutils-2.18

configure –target=bfin-uclinux-gnu

Blackfin系列DSP

Cygwin gcc 3.4.4

 

欢迎转载,但请保留作者信息

 

 

 

1.1    ar$(EXEEXT)

这条规则定义为:

ar$(EXEEXT): $(ar_OBJECTS) $(ar_DEPENDENCIES)

       @rm -f ar$(EXEEXT)

       $(LINK) $(ar_LDFLAGS) $(ar_OBJECTS) $(ar_LDADD) $(LIBS)

在目标生成后将它们链接为objdump.exe

 

1.1.1   $(ar_OBJECTS)

这个变量定义为:

am_ar_OBJECTS = arparse.$(OBJEXT) arlex.$(OBJEXT) ar.$(OBJEXT) /

       not-ranlib.$(OBJEXT) arsup.$(OBJEXT) rename.$(OBJEXT) /

       binemul.$(OBJEXT) emul_$(EMULATION).$(OBJEXT) $(am__objects_1)

ar_OBJECTS = $(am_ar_OBJECTS)

am__objects_1 = bucomm.$(OBJEXT) version.$(OBJEXT) filemode.$(OBJEXT)

其中am__objects_1定义的目标已经生成,故有以下依赖关系:

1.1.1.1             arparse.$(OBJEXT)

这条规则定义为:

arparse.o:

       $(COMPILE) -c $< $(NO_WERROR)

且有以下依赖关系:

arparse.o: arparse.c sysdep.h $(INCDIR)/ansidecl.h /

  ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h /

  $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h arsup.h

没什么,直接编译即可。

 

1.1.1.2             arlex.$(OBJEXT)

这条规则定义为:

arlex.o:

       $(COMPILE) -c $< $(NO_WERROR)

且有以下依赖关系:

arlex.o: arlex.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h /

  $(INCDIR)/ansidecl.h arparse.h

没什么,直接编译即可。

 

1.1.1.3             ar.$(OBJEXT)

这个目标由通用规则完成:

.c.o:

       $(COMPILE) -c $<

且有以下依赖关系:

ar.o: ar.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h /

  config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h /

  $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h /

  $(INCDIR)/progress.h $(INCDIR)/aout/ar.h $(BFDDIR)/libbfd.h /

  $(INCDIR)/hashtab.h bucomm.h arsup.h $(INCDIR)/filenames.h /

  binemul.h

没什么,直接编译即可。

 

1.1.1.4             not-ranlib.$(OBJEXT)

这个目标由通用规则完成:

.c.o:

       $(COMPILE) -c $<

且有以下依赖关系:

not-ranlib.o: not-ranlib.c

没什么,直接编译即可。

 

1.1.1.5             arsup.$(OBJEXT)

这个目标由通用规则完成:

.c.o:

       $(COMPILE) -c $<

且有以下依赖关系:

arsup.o: arsup.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h /

  config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h /

  $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h /

  $(INCDIR)/filenames.h bucomm.h arsup.h

没什么,直接编译即可。

 

1.1.1.6             rename.$(OBJEXT)

这个目标由通用规则完成:

.c.o:

       $(COMPILE) -c $<

且有以下依赖关系:

rename.o: rename.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h /

  config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h /

  $(INCDIR)/symcat.h bucomm.h

没什么,直接编译即可。

 

1.1.1.7             binemul.$(OBJEXT)

这个目标由通用规则完成:

.c.o:

       $(COMPILE) -c $<

且有以下依赖关系:

binemul.o: binemul.c binemul.h sysdep.h $(INCDIR)/ansidecl.h /

  ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h /

  $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h

没什么,直接编译即可。

 

1.1.1.8             emul_$(EMULATION).$(OBJEXT)

在这里:

EMULATION = vanilla

这个目标由通用规则完成:

.c.o:

       $(COMPILE) -c $<

且有以下依赖关系:

emul_vanilla.o: emul_vanilla.c binemul.h sysdep.h $(INCDIR)/ansidecl.h /

  ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h /

  $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h

没什么,直接编译即可。

 

1.1.2   $(ar_DEPENDENCIES)

这个变量定义为:

ar_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)

LIBINTL_DEP =

LIBIBERTY = ../libiberty/libiberty.a

BFDLIB = ../bfd/libbfd.la

所需要的目标均已生成,略过。

 

 

 

 

参考资料

binutils-2.18/libiberty/Makefile分析 2008-8-27

binutils-2.18/bfd/Makefile分析( 2008-8-28 )

binutils-2.18/opcodes/Makefile分析( 2008-8-29 )

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嵌云阁主

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

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

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

打赏作者

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

抵扣说明:

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

余额充值