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。
  • 相关阅读:
    控制容器的反转和依赖注入模式
    缓存和内存区别
    数据库知识总结:sqlserver中事务总结:begin tran,rollback tran,commit tran +IndexDB总结
    SqlServer数据库1433端口问题1
    网络配置:IP+NETMASK+GATEWAY+DNS
    Shell脚本中非交互式修改密码的方法(转)
    Linux之sed:删除某行以及替换
    每日命令:(3)pwd
    Linux目录结构详细介绍
    关于Linux字符集的查看及修改
  • 原文地址:https://www.cnblogs.com/lyyyuna/p/4123905.html
Copyright © 2011-2022 走看看