[SCons 有点翻译的scons学习] 3. 生成和使用库

chapter 4. building and linking with libraries
=====
在大型的软件中,用库来管理十分方便,也可以为代码复用省不少事。

4.1 building libraries
=====
像 Program 函数一样,只需要调用 Library 函数就能生成库了。
      Library('foo', ['f1.c', 'f2.c', 'f3.c'])

      % scons -Q
      cc -o f1.o -c f1.c
      cc -o f2.o -c f2.c
      cc -o f3.o -c f3.c
      ar rc libfoo.a f1.o f2.o f3.o
      ranlib libfoo.a
除了从源码生成库,还可以从.o 文件生成库。
        Library('foo', ['f1.c', 'f2.o', 'f3.c', 'f4.o'])

        % scons -Q
        cc -o f1.o -c f1.c
        cc -o f3.o -c f3.c
        ar rc libfoo.a f1.o f2.o f3.o f4.o
        ranlib libfoo.a
默认生成的是静态库,也可以显示的指定生成静态库。
        StaticLibrary('foo', ['f1.c', 'f2.c', 'f3.c'])
也可以指定生成动态库
        SharedLibrary('foo', ['f1.c', 'f2.c', 'f3.c'])

        % scons -Q
        cc -o f1.os -c f1.c
        cc -o f2.os -c f2.c
        cc -o f3.os -c f3.c
        cc -o libfoo.so -shared f1.os f2.os f3.os

4.2 linking with libraries
=====
在使用 Program 编译时,用 $LIBS 指定库名称,用 $LIBPATH 指定库的路径。
      Library('foo', ['f1.c', 'f2.c', 'f3.c'])
      Program('prog.c', LIBS=['foo', 'bar'], LIBPATH='.')
我们不用显示的指定库的前缀和后缀,这些 SCons 会自动给我们做好了。
      % scons -Q
      cc -o f1.o -c f1.c
      cc -o f2.o -c f2.c
      cc -o f3.o -c f3.c
      ar rc libfoo.a f1.o f2.o f3.o
      ranlib libfoo.a
      cc -o prog.o -c prog.c
      cc -o prog prog.o -L. -lfoo -lbar
可以看到,-L.,SCons自动生成了flags。

转载于:https://www.cnblogs.com/lyyyuna/archive/2013/04/22/4123905.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值