[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。
posted @ 2013-04-22 14:38  lyyyuna  阅读(324)  评论(0编辑  收藏  举报