scons实践笔记(1)--hello world
2013-03-28 20:11
183 查看
好久没记笔记了,又是虎头蛇尾,惭愧!scons是下一代构建工具,学习RT-Thread OS时接触到的,小试一下感觉还是挺好用的,便打算细细学习一番,以用在以后的开发中,工欲善其事,必先利其器嘛,不要急,慢慢来。
假设已安装Python环境(必须),scons官网下载安装包,解压,然后以命令行进入解压缩后的目录,执行python setup.py install即可,注意这里需要root权限,如果安装在其它目录则使用python setup.py install --prefix=$HOME这样的命令,当然$HOME可以换成其它路径,不过要注意权限。其它安装事项,见解压目录下的README.txt。
第一个例子,hello world的交叉编译:
src = Glob("*.c")是参与编译的文件的定义,是当前目录下的所有以.c结尾的源文件,在这里只有一个main.c;再接下来的两句env = Environment(...)和env.PreendENVPath(...)指定所使用的编译器和具体路径(这里稍微复杂),若缺省则默认使用GCC;最后一句,指定参与编译文件和最终生成的可执行文件的名称(即hello_world)。
将可执行文件hello_world以某种方式传输到arm平台下即可执行
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 用户手册,不要再到处找资料了。
假设已安装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 用户手册,不要再到处找资料了。
相关文章推荐
- scons实践笔记(2)--带选项的编译
- scons 实践笔记(3)--模块编译
- UE实践笔记:KJ法在用户研究中的应用
- 《深入理解Android:Telephon原理剖析与最佳实践》学习笔记(系统框架)
- 《Python编程:从入门到实践》第10章 笔记
- 学习笔记-Linux C编程实践
- 机器学习实践 学习笔记4 naïve Bayes
- 推荐系统实践学习笔记(一)
- Python爬虫实践笔记(四)
- JAX-RPC学习笔记(1)-Hello World!
- 张高兴的 Xamarin.Android 学习笔记:(二)“Hello World”
- Linux实践工程师学习笔记八
- WebService 项目实践笔记
- c++学习笔记:hello world
- 读《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之会话
- 读《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之服务器角色介绍
- 分布式服务框架-原理与实践:15---服务降级[展示API]-学习笔记
- Python编程:从入门到实践读书笔记-5 if语句 & 6 字典
- C++实践笔记(三)----找到公主啦,好开心啊!