• scons的使用


    以下测试是在linux下.

    1.安装.

    $sudo apt install scons

    2.查看安装版本:

    $scons --version

    会出现以下内容:

    SCons by Steven Knight et al.:
        script: v2.4.1.rel_2.4.1:3453:73fefd3ea0b0, 2015/11/09 03:25:05, by bdbaddog on ubuntu1404-32bit
        engine: v2.4.1.rel_2.4.1:3453:73fefd3ea0b0, 2015/11/09 03:25:05, by bdbaddog on ubuntu1404-32bit
        engine path: ['/usr/lib/scons/SCons']
    Copyright (c) 2001 - 2015 The SCons Foundation

    3.在任意位置建立文件夹helloscons.

    4.在helloscons文件夹下建立两个文件:源文件helloscons.c和配置文件sconstruct,它们的内容如下:

    helloscons.c文件:

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

    sconstruct文件:

    Program('helloscons.c')

    5.cd到helloscons文件夹下,运行scons命令:

    $ scons

    此时会出现:

    scons: Reading SConscript files ...
    scons: done reading SConscript files.
    scons: Building targets ...
    gcc -o helloscons.o -c helloscons.c
    gcc -o helloscons helloscons.o
    scons: done building targets.

    建造结束后,得到了二进制文件 helloscons 以及编译的过程中产生的一些以 .o 结尾的目标文件。试运行 helloscons 一下 ,

    $ ./helloscons

    会得到 :
    Hello, SCons!

    你可能很惊讶 SConstruct 的内容只有一行,然而事实确实如此,它比传统的 Makefile 简单很多。SConstruct 以 Python 脚本的语法编写,你可以像编写 Python 脚本一样来编写它。其中的 Program 是编译的类型,说明你准备想要建造一个可执行的二进制程序,它由 helloscons.c 文件来生成。在这里,没有指定生成的可执行程序的名字。不过不用担心,SCons 会把源代码文件名字的后缀去掉,用来作为可执行文件的名字。在这里,我们甚至不需要像 Makefile 那样指定清理的动作,就可以执行清理任务。在 SCons 中,执行清理任务由参数 -c 指定,如下 :

    $ scons -c 
    scons: Reading SConscript files ... 
    scons: done reading SConscript files. 
    scons: Cleaning targets ... 
    Removed helloscons.o 
    Removed helloscons 
    scons: done cleaning targets. 
     
    $ ls 
    helloscons.c  SConstruct

    如果你不想直接编译可执行的二进制文件,那也没有关系。SCons 支持多种编译类型,你可以根据自己的需要,任意选用其中的一种。SCons 支持的编译类型有:

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

    这个简单的 SConstruct 的配置文件从一个侧面说明了使用 SCons 来建造程序是多么的简单。 在实际的项目开发中,程序的建造规则远比 helloscons 这个例子复杂。不过,这些都不是问题,你可以像扩展你自己的 Python 脚本文件那样去扩展 SConstruct. 如果你不想使用 SConstruct 为你设置的默认可执行文件的名字,而是选择你自己喜欢的名字,如 myscons,可以把 SConstruct 的内容修改为 :

    Program('myscons, 'helloscons.c')

    其中 myscons 就是你想要的可执行文件的名字,你可以把它换成任意你喜欢的名字, 不过有点注意的是,这个名字必须放在第一位。 然后在 helloscons 目录下运行 scons 命令,就会得到 myscons 这个可执行文件,如下:

    $ scons -Q 
    gcc -o helloscons.o -c helloscons.c 
    gcc -o myscons helloscons.o

    其中的 -Q 参数是减少编译时的由 scons 产生的冗余信息。 如果你的项目由多个源文件组成,而且你想指定一些编译的宏定义,以及显式的指定使用某些库,这些对于 SCons 来说,都是非常简单的事情。我们的另外一个例子 helloscons2 很好的说明这种情况。 helloscons2 由 3 个源文件组成 , 它们是 helloscon2.c, file1.c, file2.c,另外指定了编译的选项,同时还指定了使用哪些具体的库。让我们来看一下 helloscons2 的 SConstruct 文件 :

    Program('helloscons2', ['helloscons2.c', 'file1.c', 'file2.c'], 
           LIBS = 'm', 
           LIBPATH = ['/usr/lib', '/usr/local/lib'], 
           CCFLAGS = '-DHELLOSCONS')

    正如你想像的那样,这样一个配置文件并不复杂 . 该 SConstruct 文件指出,它将生成一个名叫 helloscons2 的可执行程序,该可执行程序由 helloscons2.c, file1.c 和 file2.c 组成。注意,多个源文件需要放在一个 Python 列表中。如果你的源程序代码文件很多,有十几个甚至上百个,那不要一个个的将他们都列出来,你可以使用 glob('*.c') 来代替源代码列表。如下 :

    Program('helloscons2', Glob('*.c')

    配置文件中 LIBS,LIBAPTH 和 CCFLAGS 是 SCons 内置的关键字,它们的作用如下:

    • LIBS: 显示的指明要在链接过程中使用的库名,如果有多个库,应该把它们放在一个列表里面。这个例子里,我们使用一个称为 m 的库。
    • LIBPATH: 链接库的搜索路径,多个搜索路径放在一个列表中。这个例子里,库的搜索路径是 /usr/lib 和 /usr/local/lib。
    • CCFLAGS: 编译选项,可以指定需要的任意编译选项,如果有多个选项,应该放在一个列表中。这个例子里,编译选项是通过 -D 这个 gcc 的选项定义了一个宏 HELLOSCONS。
    • 此外,还可以指定程序编译过程中需要查找的头文件路径
          使用关键字CPPPATH
          例如:
          Program('hello','hello.c', CPPPATH = ['include', '/home/project/inc'])
          生成hello程序的时候hello.c可能引用了其他的头文件,在编译hello.c的时候会查找./include和/home/project/inc下是否有需要的头文件 (这一条说明来自于:https://blog.csdn.net/fly542/article/details/38342003)

    运行 scons 命令的时候,可以看到这些变量如何被使用的,让我们执行一下 scons 命令 :

    $ scons -Q 
    gcc -o file1.o -c -DHELLOSCONS file1.c 
    gcc -o file2.o -c -DHELLOSCONS file2.c 
    gcc -o helloscons2.o -c -DHELLOSCONS helloscons2.c 
    gcc -o helloscons2 helloscons2.o file1.o file2.o -L/usr/lib -L/usr/local/lib -lm

    scons 命令的输出显示了可执行程序 helloscons2 如何由多个源文件而生成,以及在 SConstruct 中定义的 LIBS,LIBPATH 和 CCFLAGS 如何被使用。 可见,即使对于复杂的项目,SCons 的编译配置文件也很简单。除此之外,SCons 也提供了很多功能以适应不同的需要,如果读者想更深入的了解如何使用 SCons,可以参考 SCons 的帮助手册。

    来源:https://www.ibm.com/developerworks/cn/linux/l-cn-scons/



       



  • 相关阅读:
    我是5型
    现在的我,有两个状态。我要去找第三个
    什么是BNF范式,什么又是EBNF范式?
    又是好久不写日志
    语料库资源汇总
    原生js与css3结合的电风扇
    JavaScript基础2
    JavaScript基础1
    JavaScript基础4
    JavaScript基础3
  • 原文地址:https://www.cnblogs.com/yibeimingyue/p/10603005.html
Copyright © 2020-2023  润新知