scons实践笔记(1)--hello world

    好久没记笔记了,又是虎头蛇尾,惭愧!scons是下一代构建工具,学习RT-Thread OS时接触到的,小试一下感觉还是挺好用的,便打算细细学习一番,以用在以后的开发中,工欲善其事,必先利其器嘛,不要急,慢慢来。

    假设已安装Python环境(必须),scons官网下载安装包,解压,然后以命令行进入解压缩后的目录,执行python setup.py install即可,注意这里需要root权限,如果安装在其它目录则使用python setup.py install --prefix=$HOME这样的命令,当然$HOME可以换成其它路径,不过要注意权限。其它安装事项,见解压目录下的README.txt。


   第一个例子,hello world的交叉编译:

> mkdir hello_world

> cd hello_world

> vim main.c

#include <stdio.h>
int main(void)
{
    printf("hello,world!\n");
    return 0;
}

> vim SConstruct

EXE_PATH = '/opt/arm-2007q1/bin'
PREFIX = 'arm-none-linux-gnueabi-'
ARMCC = PREFIX + 'gcc'
ARMAS = PREFIX + 'gcc'
ARMAR = PREFIX + 'ar'
ARMLINK = PREFIX + 'gcc'
ARMSIZE = PREFIX + 'size'
ARMOBJDUMP = PREFIX + 'objdump'
ARMOBJCPY = PREFIX + 'objcpy'

src = Glob('*.c')
env = Environment (AS = ARMAS,
                   CC = ARMCC,
                   AR = ARMAR,
                   LINK = ARMLINK)

env.PrependENVPath ('PATH',EXE_PATH)

env.Program(source = src, target = 'hello_world')

> ls 
main.c  SConstruct 

> scons 
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
arm-none-linux-gnueabi-gcc -o main.o -c main.c
arm-none-linux-gnueabi-gcc -o hello_world main.o
scons: done building targets.

> ls
main.c  main.o  hello_world  SConstruct


src = Glob("*.c")是参与编译的文件的定义,是当前目录下的所有以.c结尾的源文件,在这里只有一个main.c;再接下来的两句env = Environment(...)和env.PreendENVPath(...)指定所使用的编译器和具体路径(这里稍微复杂),若缺省则默认使用GCC;最后一句,指定参与编译文件和最终生成的可执行文件的名称(即hello_world)。

将可执行文件hello_world以某种方式传输到arm平台下即可执行

> scons -c
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Cleaning targets ...
Removed main.o
Removed hello_world
scons: done cleaning targets.

> ls
main.c  SConstruct

scon 相当于make,而scons -c 相当于 make clean


几点说明:

(1)默认的编译器是gcc,如果想要用到其它交叉编译器,则需要额外设置一些东西了。

(2)觉得scons 与 make最大 的不同,在于不需要指定依赖关系,也不需要指定每个命令的具体动作,这些完全是由scons自动完成的,比如:不必像makefile那样需要指定make和make clean时要执行的具体动作。这习惯了make的我对这有点不适应,总觉得有点不太放心。好在可以手动干预这个过程,以达到我们想要的目的。

(3)scons 是基于python开发,在使用scons的同时可以使python脚本,这就允许自己借助python的力量写出各种各样的工具来满足各种需求,这才是真正比make强大的地方。

(4)现在才发现,最好的scons学习资料就是官网的scons 用户手册,不要再到处找资料了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章