美文网首页
scons编译工具

scons编译工具

作者: 黑白配ly | 来源:发表于2017-04-18 10:39 被阅读711次

    1. sons介绍

    sons是一种新的编译工具,是基于makefile的发展而来,使用python语言编写。SCons 是一个开放源代码、以 Python 语言编写的下一代的程序建造工具。它最初的名字是 ScCons, 基于由 perl 语言编写的 Cons 软件开发而成,它在 2000 年 8 月获得了由 Software Carpentry 举办的 SC 建造比赛的大奖。现在 ScCons 已经被改名为 SCons,目的是为了表示不再与 Software Carpentry 有联系,当然,还有一个目的,就是为了更方便的输入。

    2. 安装和配置

    1. 登陆scons官网http://scons.org/,下载最新版的scons-2.5.1.tar.gz包。
    2. tar -zxf *.gz(解压文件)
    3. sudo python setup.py install

    3. 使用scons

    sons和makefile类似,可以编译多种源文件,不过它编译的脚本叫SConstruct。

    ex:

    #include <stdio.h>
    #include <stdlib.h>
    int main(int argc, char* argv[])
    {
    printf("Hello, world!\n");
    return 0;
    }
    

    编译这个文件可以在原文件所在目录,新建SConstruct文件。编写内容如下

    Program('hello.c')
    

    这个时候会生成hello.o和hello的可执行文件。如果想更改编译的可执行文件名字可这样写

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

    如果编译的源文件有多个.c文件。可以这样写

    Program('hello_world', ['test.c', 'test1.c', 'test2.c'])
    

    如果文件太多.c的话,可以使用Glob函数。

    Program('world', Glob("*.c"))
    

    SCons 支持的编译类型有:
    Program: 编译成可执行程序(在 Windows 平台上即是 exe 文件),这是最常用的一种编译类型。
    Object: 只编译成目标文件。使用这种类型,编译结束后,只会产生目标文件。在 POSIX 系统中,目标
    文件以 .o 结尾,在 Windows 平台上以 .OBJ 结尾。
    Library: 编译成库文件。SCons 默认编译的库是指静态链接库。
    StaticLibrary: 显示的编译成静态链接库,与上面的 Library 效果一样。
    SharedLibrary: 在 POSIX 系统上编译动态链接库,在 Windows 平台上编译 DLL
    例子

    StaticLibrary('libstatic', ['test1.c','test2.c'])
    
    Program('world', 'test.c', LIBS='libstatic', LIBPATH='.', CCFLAGS='-Den_print')
    

    这个LIBS是指依赖的库的名字,LIBPATH指的是搜素库的路径。CCFLAGS是定义的编译参数。这个是定义了en_print这个宏,这个宏是可以传进源文件里面的。这个LIBS我做实验的时候用的动态库,一直提示有错误,使用静态库就可以了。不知道这个地方是不是有什么设置。
    贴一下过程中写的源代码SConstruct

      1 #Program('hello_world', ['test.c', 'test1.c', 'test2.c'])
      2 #Program('world', Glob("*.c"))
      3 #StaticLibrary('libstatic', ['test1.c','test2.c'])
      4 #Program('world', 'test.c', LIBS='libstatic', LIBPATH='.', CCFLAGS='-Den_print=2')
    
    

    相关文章

      网友评论

          本文标题:scons编译工具

          本文链接:https://www.haomeiwen.com/subject/pixxzttx.html