快速业务通道

如何用scons构建工具

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-19

这篇文章不错,大家看看!

scons 是一个比较有意思的软件构建工具,其本意是想替代著名的autotools系列,我没有用过autotools,不过看到网上的 autotools使用教程就头晕,后来听说了scons,就仔细下载了它的文档看了一下,觉得很符合我的口味.scons与autotools和 cmake等工具不同的是,它并不是从一个类似工程配置的文件中生成Makefile,再调用make进行编译,而是直接控制编译器,从这个意义上来说, 它其实并不是替代autotools,而是make!下面是一个简单的例子,如果你想编译著名的hello.c文件:

  1. #include <stdio.h>
  2. int main(){
  3. printf("hello,worldn");
  4. return 0;
  5. }

  只需在hello.c的当前目录下建立一个叫SConstruct的文件:

  1. Program(''hello,''hello.c'')

  然后运行scons就可以了,scons会自动调用gcc(不是make)来编译生成可执行程序hello.如果hello.c中引用了foo.h这个头文件,而foo.h声明的函数定义在foo.c,则SConstrut可以写成:

  1. Program(''hello'',[''hello.c'',''foo.c''])

  Program的第一个参数是目标,后面可以是单个源文件名或源文件名数组.注意,scons是很智能的,它知道hello.c依赖于 foo.h,当foo.h发生改变时,就会重新编译hello.c.这个依赖关系不需要我们额外写代码.如果源文件太多了,全写在那个数组里太长了, 而源文件都是在同一个目录以.c为后辍时,我们可以简写如下:

  1. Program(''hello'',Glob("*.c"))

  如果程序引入了其它的库,库名为libbar.a,库的目录为/usr/local/lib:

  1. Program(''hello'',Glob("*.c"),LIBS=''bar'',LIBPATH= 拥有帝国一切,皆有可能。欢迎访问phome.net''/usr/local/lib'')

  如果使用了pkg-config来管理库,可以用环境(Enviroment)如下,例如我使用了GTK 2.0:

  1. env=Enviroment()
  2. env.ParseConfig("pkg-config --libs --cflags gtk -2.0")
  3. env.Program(''hello'',Glob("*.c"))

  scons除了可以编译C/C 程序以外,它还可以编译LaTeX,如

  1. DVI(''paper.dvi'',''paper.tex'')

  就可以用latex命令来编译paper.dvi文件,scons还可以编译Java等其它类型的程序,具体内容见scons的官方文档.
scons本身有一些设计得很好的地方,SConstruct的本身是一个合法的Python程序,它并没有像c,make那样使用自有的配置文件格式, 可以使用所有Python的实用库来完成更高级的运用.还有它判断文件更改是默认情况下不是根据时间戳,而是MD5码!上面foo.h被touch 了,并不会导致重新编译.scons的缺点是其效率太低,速度太慢.

转自 太阳神上 的 Blog: http://moligaloo.is-programmer.com/2008/9/12/Using-Scons-Software-Building-Tool.5332.html

拥有帝国一切,皆有可能。欢迎访问phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号