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。
  • 相关阅读:
    浏览器—CORS 通信的学习总结
    前端算法
    移动端适配时对meta name="viewport" content="width=device-width,initial-scale=1.0"的理解
    react和vue的区别
    对xss攻击和csrf攻击的理解
    前端如何解决跨域
    你没那么重要
    五福
    天道
    决策
  • 原文地址:https://www.cnblogs.com/lyyyuna/p/4123905.html
Copyright © 2011-2022 走看看