查看文章 |
scons简介: scons是一个Python写的自动化构建工具,从构建这个角度说,它跟GNU make是同一类的工具。
Scons的 命令集合: Scons 编译命令 Scons –c 清除
文件目录参数: Prrogram 参数 为 列表类型 1、Program('program', ['prog.c', 'file1.c', 'file2.c']) 参数 是一个 python list 所以可以这么写: Filelist = [‘a,.c’,’b.c’……..] Program(‘program’,Filelist)
2、加载所有的内容 *.c 或者 Program(‘program’,Glob(‘*.c’))
3、SCons还对output file和source file有关键字,可以用来指定
4、Scons的 –q参数可以快速生成,过滤一些输出信息
编译动态库 Scons可以在用户和编译器之间传递信息,并控制编译器完成构建。同样的,编译目标文件,构建静态库、动态库可以由下面的一些builder来完成。
Library('foo', ['f1.c', 'f2.c', 'f3.c']) #生成名为foo的静态库,在Windows上是foo.lib,在unix上为libfoo.a
StaticLibrary('foo', ['f1.c', 'f2.c', 'f3.c']) #生成名为foo的静态库,在Windows上是foo.lib,在unix上为libfoo.a
SharedLibrary('foo', ['f1.c', 'f2.c', 'f3.c']) #生成名为foo的动态库,在Windows上是foo.dll,在unix上为libfoo.so
Object('add.c') #生成名为add的目标文件,在Windows上是add.obj,在unix上为add.o
编译参数: busybuild VS8-DEBUG projects
范例如下: Library(‘foo’,[‘test.c’,’a.c’]) Program(‘program.c’,LIBS=[‘foo’,’bar’],LIBPATH=’.’)
针对性的编译 采用 Scons编译的时候,Scons会自动识别已经编译过的文件。如果再次编译 回报: ‘.’ Is up-to-date. 可以采用 scons –c清除 然后重新编译 如果要针对性的编译 采用 scons –q hello 这样会重新编译 hello.c
Dependencies依赖的设置 1、 Using MD5 Signatures Program(’hello.c’) Decider(’MD 2、 Usering TimeStamps to deside if a File Has Changed Program(’hello.c’) Decider(’timestamp-newer’) 3、 混合校验 Program(’hello.c’) Decider(’MD5-timestamp’)
4、 两个官方不推荐的验证function SourceSignatures(‘MD SourceSignatures(‘timestamp-newer’)
TargetSignatures(‘MD TargetSignatures(‘timestamp’)
Cache implicit Dependencies(缓存固有依赖)
Scons环境设置: Environments: 字典类型
外部环境,来之于 python的 os模块的信息
构建环境,决定scons那部分被执行!
a、如果没有特别指定,可以 指定一个 默认的参数: env.SetDefault(SPECIAL_FLAG = ’-extra-option’) b、增加唯一的参数 env.AppendUnique(CCFLAGS=[’-g’]) c、增加 一个 开始(预知)参数 env.Prepend(CCFLAGS = [’-DFIRST’]) 或者 env.PrependUnique(CCFLAGS=[’-g’])
3. Execution Environment 执行环境
增加执行路径的管理: env = Environment(ENV = {’PATH’ : path}) env = Environment(FOO = 'foo', BAR = 'bar')
dict = env.Dictionary() print dict.keys() for key in ['OBJSUFFIX', 'LIBSUFFIX', 'PROGSUFFIX']: print "key = %s, value = %s" % (key, dict[key])
d_env = DefaultEnvironment() print d_env['CC']
将path加入到环境中来 env = Environment(ENV = os.environ) env.PrependENVPath(’PATH’, ’/usr/local/bin’) env.AppendENVPath(’LIB’, ’/usr/local/lib’)
第八章 将操作合并到环境中来
env = Environment() env.Append(CPPPATH = [’/include’, ’/usr/local/include’, ’/usr/include’]) flags = { ’CPPPATH’ : [’/usr/opt/include’, ’/usr/local/include’] } env.MergeFlags(flags) print env[’CPPPATH’]
Scons会智能的合并自己定义的操作,如果有重复的那么 scons自动采用在 前面声明的变量。 值得注意的是:在 分离编译 的时候,scons会将变量的值就行排序,然后返回一个新的字典 在进行 MergeFlage 操作
第九章: 分离编译参数设定 分离编译函数 :PaseFlags (注意:第九章看的不是很明白)
第十章: 查找安装过的类库 Parsdonfig函数
第十一章:对输出的控制 输出帮组信息: Help(‘’’ Type : ‘this is a complie tools about the’ ‘’’)
if(env['PLATFORM'] == 'win32'): Help('\n' + ''' Tpye: scons windebug,to buid the windows debug version ''') |

