zoukankan      html  css  js  c++  java
  • [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。
  • 相关阅读:
    [树莓派]wifi在面板看不到,但是可以scan到的解决方案
    关于GCD的几个结论
    Ubuntu配置vncserver
    树莓派更改vnc分辨率
    玩转树莓派
    两个树莓派(或香蕉派)之间的音频直播测试
    使用树莓派录音——USB声卡
    树莓派自定义命令(给命令起别名)
    gitlab搭建
    linux下的缓存机制及清理buffer/cache/swap的方法梳理 (转)
  • 原文地址:https://www.cnblogs.com/lyyyuna/p/4123905.html
Copyright © 2011-2022 走看看