zoukankan      html  css  js  c++  java
  • 学习scons总结

    linux下使用Scons构建自己的项目(来源:http://blog.csdn.net/shitangdejiaozi/article/details/51499591)
    一、简介:SCons 是一个开放源代码、以 Python 语言编写的下一代的程序建造工具,替代Makefile的功能。
    二、安装:sudo apt-get install scons
    三、用法
    1、SConstruct 文件是scons用来控制编译的文件,类似MakeFile,是一个Python脚本。编译顶层脚本文件名为 SConstruct,输入scons命令后,自动调用该脚本。
    2、运行:scons 
    scons  -c 就是清理你创建的文件,就是make clean 
    scons  -Q 就是省略自带的一堆废话,只显示编译过程
    3、支持的编译类型
    Program: 编译成可执行程序
    Object :只编译成目标文件,使用这种类型,编译结束后,只会产生目标文件,.o文件。
    Library :编译成库文件,scons默认编译的库是指静态链接库
    StaticLibrary :显式的编译成静态链接库,与上面的Library效果一样
    SharedLibrary :编译成动态库
    4、语法
    Program('hello',['file.c','file2.c']), //生成可执行文件hello
    Program('hello',Glob('*.c')),//使用Glob编译所有匹配的文件
    Program('hello',Split("main.c file1.c file2.c")),//使用Split,以空白字符为分割符
    Object(‘main’, ’hello.c’):编译hello.c为目标文件,文件名为main.o
    scons的配置文件Sconscript,通过Sconscript()函数导入配置文件。

    5、关键字
    CCFLAGS 指定编译选项 
    LINKFLAGS 指定链接选项 
    CPPDEFINES指定预编译器 
    LIBS 指定所需要链接的库文件 
    LIBPATH 指定库文件(lib)的搜索路径 
    CPPPATH 指定[.h,.c,.cpp]等文件的搜素路径
    source:指定源文件名
    target:指定目标文件名。如:
    Program(source = Split(‘hello.c func1.c func2.c’), target = ‘main’)

    Program('hello',['hellosons.c','file.c'],
    LIBS = 'pthread',
    LIBPATH = ['/usr/lib','/usr/local/lib'],
    CCFLAGS = ['-g ','-Wall'],
    CPPPATH = ['/usr/include','hello/src'])
    6、使用Environments
    (1)用户的环境变量,他们可以通过os.environ获取
    (2)Construction Environment
    env = Environment(CC = ‘arm-linux-gcc’) //创建,(name,value)集合
    env.Program(‘hello.c’)
    for item in env.Dictionary():
    print '(%s:%s)' %(item,env[item]) //查看内容
    env['cc'] //查看变量
    env.subst('$CC') //查看变量,如果subset变量不存在时报告错误。
    //修改环境变量
    env.Clone //拷贝一个环境变量
    env.Replace //替换一个已经存在的环境变量
    env.SetDefault //为一个没有被定义的变量设置默认值
    env.Append(CCFLAGS = '-g') //为一个已存在的环境变量增加一个值,感觉这个比较常用啊
    env.Prepend(CCLFAGS = ‘-DFIRST’)//追加到开始位置:Prepend()
    env.AppendUnique //为一个环境变量添加一个唯一的值
    flags = {'CCFLAGS':'-option -O3 -O1'} env.MergeFlags(flags) //合并环境变量
    7、控制目标文件的路径install
    test = env.Program('test.cpp')
    env.Install('bin',test) //放入到bin目录
    //将目标放到其他目录下,并修改名字
    test = env.Program('test.cpp')
    env.InstallAs('bin/testapp',test)   //执行文件改为testapp

    8、一份源码,要构建它的debug版本,又要构建release版本

    //需要为不同的版本指定不同的obj名字,否则会冲突

    opt = Environment(CCFLAGS ='-O2')

    dbg = Environment(CCFLAGS = '-g')

    o = opt.Object('foo-opt','foo.c')   //生成foo-opt.o

    opt.Program(o)

    d = dbg.Object('foo-dbg','foo.c')  //生成foo-dbg
    .o
    dbg.Program(d)

  • 相关阅读:
    Java中一对多映射关系(转)
    java映射一对一关系 (转)
    如何创建JUnit
    Java数组转置
    get与post方法(吴老师整理)
    后台获得数据
    JDK1.8的安装与卸载
    使用JSP输出九九乘法表
    foreach
    匿名内部类
  • 原文地址:https://www.cnblogs.com/xiaomayi-cyj/p/8391893.html
Copyright © 2011-2022 走看看