SCons命令 之 从入门到精通

来源:互联网 发布:java jdk环境变量设置 编辑:程序博客网 时间:2024/04/29 13:29

SCons命令 之 从入门到精通

(2005-12-05 11:41:13)
转载
标签:

杂谈

分类:计算机与 Internet
sconstruct是执行Scons的脚本文件,是Python脚本。
c:>scons执行sconstruct中脚本
Build command insconstruct:
1.Program('hello.c') 编译hello.c可执行文件,根据系统自动生成(hello.exe on Windows; hello onPOSIX)
  Program('new_hello','hello.c')指定Output文件名(new_hello.exe on Windows; new_hello onPOSIX)
  Program(['main.c', 'file1.c','file2.c']) 编译多个文件,Output文件名以第一个文件命名(main.exe;main)
  Program('program', Split('main.c file1.c file2.c'))

2.Object('hello.c')编译hello.c目标文件,根据系统自动生成(hello.obj on Windows; hello.o onPOSIX)
 
3.Library('foo', ['f1.c', 'f2.c','f3.c']) 编译library
  SharedLibrary('foo', ['f1.c','f2.c', 'f3.c']) 编译 static library
  StaticLibrary('foo', ['f1.c','f2.c', 'f3.c']) 编译 shared library

4.Program('prog.c', LIBS=['foo', 'bar'], LIBPATH='.')连接库,不需加后缀或是前缀
5.判断源文件是否修改
   SourceSignatures('MD5')    根据内容是否改变,默认方式
   SourceSignatures('timestamp') 根据修改时间
6.判断目标文件是否改变
   TargetSignatures('build')  根据编译结果
   TargetSignatures('content') 根据文件内容,如果只是加了句注释,将不会被重新编译
 
7.Ignore(hello, 'hello.h')  忽略某个依赖关系
8.Depends(hello, 'other_file') 明确依赖关系

 
Executive command in shell
1. scons -c  clean
2. scons -Q 只显示编译信息,去除多余的打印信息
3. scons -Q--implicit-cache hello 保存依赖关系
               --implicit-deps-changed  强制更新依赖关系
              --implicit-deps-unchanged 强制使用原先的依赖关系,即使已经改变
 
Key words:
LIBS
LIBPATH
CCFLAGS
CPPPATH :Program('hello.c', CPPPATH =['include', '/home/project/inc'])
 
 
 
 
 
Concept:
1.Node Objects   文件或是目录
   hello_c =File('hello.c')
  Program(hello_c)                File Node Objects
 
   classes =Dir('classes')
   Java(classes,'src')               Directory Node Objects

 

   xyzzy =Entry('xyzzy')          Either File or Directory Node Objects


1.创建环境变量
    env = Environment()
   env.Program('foo.c')       根据不同系统创建不同的编译环境变量
    也可以改变:
    env = Environment(CC = 'gcc',CCFLAGS ='-O2')
2.复制环境变量
    env = Environment(CC = 'gcc')
    opt = env.Copy(CCFLAGS = '-O2')
    dbg = env.Copy(CCFLAGS = '-g')

3.获取环境变量
    env = Environment()
    print "CC is:",env['CC']
4.扩展环境变量
    env = Environment()
    print "CC is:",env.subst('$CC')
 
5.替换环境变量
    env = Environment(CCFLAGS ='-DDEFINE1')
    env.Replace(CCFLAGS = '-DDEFINE2')
    env.Program('foo.c')
6.尾部增加环境变量值
    env = Environment(CCFLAGS ='-DMY_VALUE')
    env.Append(CCFLAGS = ' -DLAST')
    env.Program('foo.c')
 
7.头部添加环境变量值
    env = Environment(CCFLAGS ='-DMY_VALUE')
    env.Prepend(CCFLAGS = '-DFIRST ')
    env.Program('foo.c')
 
 
使用
1.看编译命令未展开
Input:
     env = Environment(CCFLAGS ='-DFOO')
     print "CCCOM is:",env['CCCOM']
Output:
     CCCOM is: $CC$CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -c -o $TARGET$SOURCES

2.看编译命令已展开
Input:
    env = Environment(CCFLAGS = '-DFOO')
    print "CCCOM is:",env.subst('$CCCOM')
Output:
 
   CCCOM is: gcc -DFOO -c-o
0 0
原创粉丝点击