使用Scons构建代码at sa note – such another note site

[文章来自伟大的google,个人觉得东西不错,介绍给大家]
scons是一个比较有意思的软件构建工具,其本意是想替代xx的autotools系列,scons与autotools和cmake等工具不同的是,它并不是从一个类似工程配置的文件中生成Makefile,再调用make进行编译,而是直接控制编译器,从这个意义上来说,它其实并不是替代autotools,而是make!下面是一个简单的例子,如果你想编译xx的hello.c文件:

  1. #include <stdio.h>
  2. int main(){
  3. (“hello,world\n);
  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的{dy}个参数是目标,后面可以是单个源文件名或源文件名数组。注意,scons是很智能的,它知道hello.c依赖于foo.h,所以当foo.h发生改变时,就会重新编译hello.c。这个依赖关系不需要我们额外写代码。如果源文件太多了,全写在那个数组里太长了,而源文件都是在同一个目录以.c为后辍时,我们可以简写如下:

    • Program(‘hello’,Glob(“*.c”))

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

  1. Program(‘hello’,Glob(“*.c”),LIBS=‘bar’,LIBPATH=‘/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的缺点是其效率太低,速度太慢。?  scons还可以与现有的一些IDE整合,如Eclipse,KDevelop,Visual Studio等。见

Leave a Reply

click to changeSecurity Code
郑重声明:资讯 【使用Scons构建代码at sa note – such another note site】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——