SCons scons 随笔

liuxue.gu@hotmail.com · 2012年08月23日 · 6 次阅读

andylin02 http://andylin02.iteye.com/blog/849665

PythonCC++C# 脚本

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.1。SCons 可以在多种 OS 上运行,windows 的版本可以在http://www.scons.org/download.php找到。

2.hello world

用 C 写一个 hello world, 如下 int main() { printf("Hello, world!\n"); }

保存文件名为 hello.c,想要用 scons 来 build 这个文件,只需要, 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.

  1. SConstruct 和 makefile

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

  1. build 多个文件

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

指定目标文件的名字为 myprog, Program('myprog', ['prog.c', 'file1.c', 'file2.c'])

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

暂无回复。
需要 登录 后方可回复。