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。
  • 相关阅读:
    D触发器的使用小结
    CAN通信帧ID的含义解析? (转载)
    mcp2515屏蔽寄存器和过滤寄存器的学习
    spi调试步骤,mcp2515调试整理
    最近工作小结2019.11.24
    Can总线上的电平及物理层仲裁
    can总线学习网上资料汇总
    can总线的远程帧(遥控帧)—说的很形象
    在IAR平台建立STC8ASK64S4A12单片机工程
    cortex-m系列的区别(图解)及今日碎片学习笔记
  • 原文地址:https://www.cnblogs.com/lyyyuna/p/4123905.html
Copyright © 2011-2022 走看看