scons随笔

Scons是新一代的软件构件工具,或者说make工具。SCons比较特别的一点是,它的配置文件实际就是通用的python脚本,而其它make工具一般都是自定义一套私有的语言。个人感觉这既是优点又是缺点,对于已经熟悉python的人来说,这非常好,省去学习成本,但对于从未接触过python的人来说,用python做为一种make脚本,实在是过于灵活了。

 

SCons的设计原则

正确,这一点从使用MD5作为文件更新检查算法就可见一斑。要知道make使用的是时间戳,在没有ntp服务器的情况下,很容易出现因本地时间与服务器不同步而导致的不正常build

高效,只能说在满足正确的前提下做到高效,毕竟python在性能上还是无法和make相比的,当然前者可以做的事情也更多。

方便,因为已经设定了一些默认的基本的原则,所以只需要编写很少的代码就可以完成一个项目的build。这一点比make是要好。当然做一个通用的makefile模板也不是什么难事。

 

1.       安装SCons

因为SCons基于python,所以首先要安装python,本人安装的是官方推荐的python 2.5.1SCons可以在多种OS上运行,windows的版本可以在http://www.scons.org/download.php找到。

 

2.       hello world

C写一个hello world, 如下

      int
      main()
      {
          printf("Hello, world!/n");
      }

保存文件名为hello.c,想要用sconsbuild这个文件,只需要,

a.       在同一目录下,建立一个名为SConstruct的文件

b.       在该文件中加入一行,

Program('hello.c')
如果只是想compile objects,不做link,可以改为,
Object('hello.c')

c.       在当前目录下执行scons

      % scons
      scons: Reading SConscript files ...
      scons: done reading SConscript files.
      scons: Building targets ...
      cc -o hello.o -c hello.c
      cc -o hello hello.o
      scons: done building targets.

3.       make clean

makefile的忠实用户一般都会在makefile中加入clean,作用是删除已经产生的objects,可执行文件等,scons已经内置该功能,不需要额外添加代码,执行scons –c

      % scons -c
      scons: Reading SConscript files ...
      scons: done reading SConscript files.
      scons: Cleaning targets ...
      Removed hello.o
      Removed hello
      scons: done cleaning targets.

4.       SConstructmakefile

SConstructmakefile有着本质的不同,但又有着惊人的相似之处。不同的是SConstruct是一个典型的python脚本,具有一切python脚本的特性;相似的是,和makefile一样都是declarative型(非imperative型)脚本,也就是说Program, Object这些定义并不立即触发编译动作。

5.       build多个文件

Program(['prog.c', 'file1.c', 'file2.c'])

指定目标文件的名字为myprog

Program('myprog', ['prog.c', 'file1.c', 'file2.c'])

注意编译多个文件和指定目标文件可能会有语义上的歧义,因此使用文件列表时要用中括号。

 

猜你喜欢

转载自blog.csdn.net/ison81/article/details/5841229
今日推荐