在vs2008下使用cygwin(4):i686-pc-cygwin/newlib/libc/argz/Makefile分析

 

快乐虾

http://blog.csdn.net/lights_joy/

lights@hb165.com

   

本文适用于

Cygwin-1.16

Vs2008

   

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

 

这个Makefile由上一级目录的makefile调用make all执行。All目标定义为:

all: all-am

all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(DATA)

LIBRARIES = $(noinst_LIBRARIES)

noinst_LIBRARIES = lib.a

LTLIBRARIES = $(noinst_LTLIBRARIES)

noinst_LTLIBRARIES未定义

DATA = $(noinst_DATA)

noinst_DATA =

因而此目标将依赖于lib.a目标,其定义为:

lib.a: $(lib_a_OBJECTS) $(lib_a_DEPENDENCIES)

       -rm -f lib.a

       $(lib_a_AR) lib.a $(lib_a_OBJECTS) $(lib_a_LIBADD)

       $(RANLIB) lib.a

在生成所需要的目标文件后,上述脚本将它们打包成lib.a文件。这个库将用于实现libc/include/argz.hlibc/include/envz.h中定义的几个函数。关于这几个函数,kernel.org上的文档是这样描述的:

argz_*相关的函数:

       These functions are glibc-specific.

 

       An argz vector is a pointer to a character buffer together with a length.  The

       intended interpretation of the character buffer is an array of strings, where

       the strings are separated by null bytes ('/0').  If the length is non-zero,

       the last byte of the buffer must be a null byte.

 

       These functions are for handling argz vectors.  The pair (NULL,0) is an argz

       vector, and, conversely, argz vectors of length 0 must have NULL pointer.

       Allocation of non-empty argz vectors is done using malloc(3), so that free(3)

       can be used to dispose of them again.

envz_*相关的函数:

       These functions are glibc-specific.

 

       An argz vector is a pointer to a character buffer together with a length, see

       argz_add(3).  An envz vector is a special argz vector, namely one where the

       strings have the form "name=value".  Everything after the first '=' is

       considered to be the value.  If there is no '=', the value is taken to be

       NULL.  (While the value in case of a trailing '=' is the empty string "".)

 

       These functions are for handling envz vectors.

 

       envz_add() adds the string "name=value" (in case value is non-NULL) or "name"

       (in case value is NULL) to the envz vector (*envz, *envz_len) and updates

       *envz and *envz_len.  If an entry with the same name existed, it is removed.

 

       envz_entry() looks for name in the envz vector (envz, envz_len) and returns

       the entry if found, or NULL if not.

 

       envz_get() looks for name in the envz vector (envz, envz_len) and returns the

       value if found, or NULL if not.  (Note that the value can also be NULL, namely

       when there is an entry for name without '=' sign.)

 

       envz_merge() adds each entry in envz2 to *envz, as if with envz_add().  If

       override is true, then values in envz2 will supersede those with the same name

       in *envz, otherwise not.

 

       envz_remove() removes the entry for name from (*envz, *envz_len) if there was

       one.

 

       envz_strip() removes all entries with value NULL.

在这个库的实现上,只使用了字符串处理函数,因而直接使用VC自带的函数即可,cygwin也没有特殊的实现。

由于有以下定义:

lib_a_OBJECTS = $(am_lib_a_OBJECTS)

am_lib_a_OBJECTS = lib_a-dummy.$(OBJEXT) $(am__objects_1)

am__objects_1 = lib_a-argz_add.$(OBJEXT) /

       lib_a-argz_add_sep.$(OBJEXT) /

       lib_a-argz_append.$(OBJEXT) /

       lib_a-argz_count.$(OBJEXT) /

       lib_a-argz_create.$(OBJEXT) /

       lib_a-argz_create_sep.$(OBJEXT) /

       lib_a-argz_delete.$(OBJEXT) /

       lib_a-argz_extract.$(OBJEXT) /

       lib_a-argz_insert.$(OBJEXT) /

       lib_a-argz_next.$(OBJEXT) /

       lib_a-argz_replace.$(OBJEXT) /

       lib_a-argz_stringify.$(OBJEXT) /

       lib_a-buf_findstr.$(OBJEXT) /

       lib_a-envz_entry.$(OBJEXT) /

       lib_a-envz_get.$(OBJEXT) /

       lib_a-envz_add.$(OBJEXT) /

       lib_a-envz_remove.$(OBJEXT) /

       lib_a-envz_merge.$(OBJEXT) /

       lib_a-envz_strip.$(OBJEXT)

lib_a_DEPENDENCIES未定义。

lib_a_LIBADD =

因而此目标有以下的依赖关系。

1.1.1.1             lib_a-dummy.$(OBJEXT)

这个目标定义为:

lib_a-dummy.o: dummy.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-dummy.o `test -f 'dummy.c' || echo '$(srcdir)/'`dummy.c

没啥可说的,直接编译。

 

1.1.1.2             lib_a-argz_add.$(OBJEXT)

这条规则定义为:

lib_a-argz_add.o: argz_add.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-argz_add.o `test -f 'argz_add.c' || echo '$(srcdir)/'`argz_add.c;

直接编译即可。

 

1.1.1.3                   lib_a-argz_add_sep.$(OBJEXT)

这条规则定义为:

lib_a-argz_add_sep.o: argz_add_sep.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-argz_add_sep.o `test -f 'argz_add_sep.c' || echo '$(srcdir)/'`argz_add_sep.c

直接编译即可。

 

1.1.1.4                   lib_a-argz_append.$(OBJEXT)

这条规则定义为:

lib_a-argz_append.o: argz_append.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-argz_append.o `test -f 'argz_append.c' || echo '$(srcdir)/'`argz_append.c;/

直接编译即可。

 

1.1.1.5                   lib_a-argz_count.$(OBJEXT)

这条规则定义为:

lib_a-argz_count.o: argz_count.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-argz_count.o `test -f 'argz_count.c' || echo '$(srcdir)/'`argz_count.c

直接编译即可。

 

1.1.1.6                   lib_a-argz_create.$(OBJEXT)

这条规则定义为:

lib_a-argz_create.o: argz_create.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-argz_create.o `test -f 'argz_create.c' || echo '$(srcdir)/'`argz_create.c

直接编译即可。

 

1.1.1.7                   lib_a-argz_create_sep.$(OBJEXT)

这条规则定义为:

lib_a-argz_create_sep.o: argz_create_sep.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-argz_create_sep.o `test -f 'argz_create_sep.c' || echo '$(srcdir)/'`argz_create_sep.c

直接编译即可。

 

1.1.1.8                   lib_a-argz_delete.$(OBJEXT)

这条规则定义为:

lib_a-argz_delete.o: argz_delete.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-argz_delete.o `test -f 'argz_delete.c' || echo '$(srcdir)/'`argz_delete.c

直接编译即可。

 

1.1.1.9                   lib_a-argz_extract.$(OBJEXT)

这条规则定义为:

lib_a-argz_extract.o: argz_extract.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-argz_extract.o `test -f 'argz_extract.c' || echo '$(srcdir)/'`argz_extract.c

直接编译即可。

 

1.1.1.10             lib_a-argz_insert.$(OBJEXT)

这条规则定义为:

lib_a-argz_insert.o: argz_insert.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-argz_insert.o `test -f 'argz_insert.c' || echo '$(srcdir)/'`argz_insert.c

直接编译即可。

 

1.1.1.11             lib_a-argz_next.$(OBJEXT)

这条规则定义为:

lib_a-argz_next.o: argz_next.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-argz_next.o `test -f 'argz_next.c' || echo '$(srcdir)/'`argz_next.c

直接编译即可。

 

1.1.1.12             lib_a-argz_replace.$(OBJEXT)

这条规则定义为:

lib_a-argz_replace.o: argz_replace.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-argz_replace.o `test -f 'argz_replace.c' || echo '$(srcdir)/'`argz_replace.c

直接编译即可。

 

1.1.1.13             lib_a-argz_stringify.$(OBJEXT)

这条规则定义为:

lib_a-argz_stringify.o: argz_stringify.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-argz_stringify.o `test -f 'argz_stringify.c' || echo '$(srcdir)/'`argz_stringify.c

直接编译即可。

 

1.1.1.14             lib_a-buf_findstr.$(OBJEXT)

这条规则定义为:

lib_a-buf_findstr.o: buf_findstr.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-buf_findstr.o `test -f 'buf_findstr.c' || echo '$(srcdir)/'`buf_findstr.c

直接编译即可。

 

1.1.1.15             lib_a-envz_entry.$(OBJEXT)

这条规则定义为:

lib_a-envz_entry.o: envz_entry.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-envz_entry.o `test -f 'envz_entry.c' || echo '$(srcdir)/'`envz_entry.c

直接编译即可。

 

1.1.1.16             lib_a-envz_get.$(OBJEXT)

这条规则定义为:

lib_a-envz_get.o: envz_get.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-envz_get.o `test -f 'envz_get.c' || echo '$(srcdir)/'`envz_get.c

直接编译即可。

 

1.1.1.17             lib_a-envz_add.$(OBJEXT)

这条规则定义为:

lib_a-envz_add.o: envz_add.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-envz_add.o `test -f 'envz_add.c' || echo '$(srcdir)/'`envz_add.c

直接编译即可。

 

1.1.1.18             lib_a-envz_remove.$(OBJEXT)

这条规则定义为:

lib_a-envz_remove.o: envz_remove.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-envz_remove.o `test -f 'envz_remove.c' || echo '$(srcdir)/'`envz_remove.c

直接编译即可。

 

1.1.1.19             lib_a-envz_merge.$(OBJEXT)

这条规则定义为:

lib_a-envz_merge.o: envz_merge.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-envz_merge.o `test -f 'envz_merge.c' || echo '$(srcdir)/'`envz_merge.c

直接编译即可。

 

1.1.1.20             lib_a-envz_strip.$(OBJEXT)

这条规则定义为:

lib_a-envz_strip.o: envz_strip.c

       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-envz_strip.o `test -f 'envz_strip.c' || echo '$(srcdir)/'`envz_strip.c

直接编译即可。

 

 

 

参考资料

vs2008下使用cygwin1):前言( 2008-10-16 )

vs2008下使用cygwin2):i686-pc-cygwin/newlib/Makefile分析( 2008-10-16 )

vs2008下使用cygwin3):i686-pc-cygwin/newlib/libc/Makefile分析( 2008-10-16 )

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嵌云阁主

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

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

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

打赏作者

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

抵扣说明:

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

余额充值