搜索
bottom↓
回复: 38

=============新手必看======== RT-Thread scons入门指南。并提供自动化批处理文件

[复制链接]

出0入0汤圆

发表于 2012-1-11 14:20:10 | 显示全部楼层 |阅读模式
图文并茂的见附件。
scons入门指南ourdev_712333SBZ826.pdf(文件大小:302K) (原文件名:scons入门指南_mousie.pdf)
批处理ourdev_712334TK3TBE.rar(文件大小:677字节) (原文件名:_complier.rar)



SCONS自动化构建工具入门教程
mousie-yu
2012-1-7

本教程是作者在学习使用RT-Thread V1.0.0版本时,对SCONS的入门级别的经验总结。主要内容来自:
http://www.rt-thread.org/dokuwiki/doku.php?id=rt-thread%E4%B8%AD%E7%9A%84scons%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3


一、安装工具
需要安装python 2.7.x 以及 scons 2.x。注意,并不推荐安装软件的最新版本。
下载链接:
Python:http://www.python.org/ftp/python/2.7.1/python-2.7.1.msi
SCONS:http://www.rt-thread.org/download/scons-2.0.1.win32.exe

必须先安装python,再安装scons。安装路径不建议使用中文和空格之类的符号。
采用默认安装即可,假设把python安装到了D:\Python27.
则scons的默认安装路径为 D:\Python27\Scripts

为免去敲命令行的苦楚,推荐一个图形化工具 ArdaSConsUI,下载链接:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4773281&bbs_id=3066&bbs_page_no=1

请自行安装编译工具。
以RealView MDK为例,安装路径必须是纯英文且不能带空格等符号。
建议直接安装到盘符根目录,如:
D:\Keil\

下载RT-Thread V1.0.0,里面已经针对scons写好了脚本。
http://rt-thread.googlecode.com/files/RT-Thread%201.0.0.7z

至此,所有软件的准备工作完成了。
 
二、设置环境变量
为了能让系统识别scons指令,还需要设置一下工作路径。设置方式有多种,使用命令行指令path;设置环境变量;通过注_册表修改。此处介绍如何设置环境变量。

通过 我的电脑右键->属性->系统属性->高级,可以看到如下页面:

1.        在系统属性高级页面下,点击“环境变量”。
2.        在弹出的环境变量窗口下,在用户变量下点击“新建”。
3.        弹出新建用户变量窗口,输入如下信息:
变量名:PATH
变量值:D:\Python27; D:\Python27\Scripts
4.        一路确认到底即可完成设置。
       
 
三、使用SCONS编译RT-Thread
在安装完成Python和SCons后,就可以使用scons编译RT-Thread了,但是默认配置文件中并不知道你主机上安装的编译器位置,所以在编译RT-Thread之前,需要手动编辑rtconfig.py配置文件告诉scons编译器在哪里。用文本编辑器打开相应bsp目录下的rtconfig.py文件,编辑其中的:

CROSS_TOOL='keil' # 这里需要选择你使用的编译器

# EXEC_PATH指向了你编译器安装的位置
if  CROSS_TOOL == 'gcc':
        PLATFORM         = 'gcc'
        EXEC_PATH         = 'D:/SourceryGCC/bin'
elif CROSS_TOOL == 'keil':
        PLATFORM         = 'armcc'
        EXEC_PATH         = 'D:/Keil'
elif CROSS_TOOL == 'iar':
        PLATFORM         = 'iar'
        IAR_PATH         = 'C:/Program Files/IAR Systems/Embedded Workbench 5.4 Evaluation_0'       
作者用的是编译器keil,修改keil的工作路径为“D:/Keil”,注意路径符号用的是反斜杠“/”,而非windows的“\”。
       
修改好上述信息后,请出 Arda SConsUI软件。使用起来非常方便。

1.        设置工作路径,该路径同样不允许有中文和空格之类的符号存在。
2.        点击Bulid。
3.        查看编译结果,编译成功完成。

四、增减组件及生成RVMDK工程
                增减组件非常简单。只需在rtconfig.h中宏定义某个组件。以文件系统为例:
        在rtconfig.h中,宏定义RT_USING_DFS。然后用 Arda SConsUI软件编译即可。
        #define RT_USING_DFS   // 使能文件系统

此时可能还需要使用RVMDK工程文件进行调试。使用scons可以自动生成RVMDK的工程文件。确保工程目录下包含一个名为 template.Uv2 或 template.uvproj 的模板工程。其中 .Uv2是给RVMDK V3.xx版本用的,.uvproj是给RVMDK V4.xx版本用的,当然,RVMDK V4.xx是可以打开 .Uv2工程并转换为 .uvproj工程的。

运行cmd,进入命令提示符窗口。
1.        进入工程目录。
2.        输入指令:scons --target =mdk4 -s 创建RVMDK V4.xx版本的工程。
如果需要RVMDK V3.xx版本的工程,输入:scons --target =mdk -s
3.        此时在工程目录下,可以看到RVMDK工程文件project.uvproj或project.Uv2。
打开工程即可看到文件系统已加入。
五、Sconsstruct 和 Sconsscript
               
SConstruct文件是scons所接受的编译脚本主文件,它包含了一些基本的变量信息。
如果要关联用户自定义组件,需要在Sconsstruct中增加内容。已STM32固件库为例,有如下内容:
# STM32 firemare library building script
objs = objs + SConscript(RTT_ROOT + '/bsp/stm3210/Libraries/SConscript', variant_dir='bsp/Libraries', duplicate=0)
其含义为,让一个SConstruct文件再关联一个新的组件(用户自行定义的组件,而不是RT-Thread系统的组件,此处是STM32的固件库)。



Sconsscript分散在各个组件目录中,可理解为组件脚本。以下的是一个脚本范例:
Import('RTT_ROOT')
from building import *

src   = Glob('*.c')
CPPPATH = [RTT_ROOT + '/components/pthreads']
group = DefineGroup('pthreads', src, depend = ['RT_USING_PTHREADS'], CPPPATH = CPPPATH)

Return('group')
注意:如果是在components目录下放置一个新目录,并附加上类似上面的正确SConscript文件,那么在RT-Thread编译的过程中,scons将会自动寻找这个组件,并检查它的依赖关系,如果依赖关系满足,将自行把这个组件添加到编译过程中。
可以加入的参数包括:
-        CCFLAGS                 – C源文件编译的参数;
-        CPPPATH                 – 应该额外包含的头文件路径;
-        CPPDEFINES         – C源文件编译时额外的宏定义;
-        LINKFLAGS         – 连接时应该添加的参数。
 
六、懒人必备之批处理
                笔者是懒人,对于重复劳动这种吃力不讨好的事情要坚决杜绝!!!
于是使用批处理将整个过程简化到了极致。环境变量、ArdaSConsUI都忽略掉吧,不需要他们了。只需将批处理放在工程目录下,双击运行即可!
批处理代码如下。保存为 .bat 格式即可。

@echo off
@Rem 设置 Python27 及 Scripts 的路径
set python=D:\Program Files\Python27
set scripts=D:\Program Files\Python27\Scripts

@Rem 设置编译器,mdk/mdk4/iar
set complier=mdk4

@Rem 设置编译方式,0 或 1表示普通编译 >2表示多核编译
set core=2

@Rem 将本批处理文件放到工程目录下点击运行即可
@Rem 注意:工程目录不可有“中文”“空格”等字符出现



@Rem 下面命令可自动实现编译及生成RVMK
@Rem 加入script工作路径
path %path%;%python%;%scripts%
cd %~dp0

@Rem 编译或生成工程
:Start
echo .
echo .
echo .
echo *****************************************************
echo * author: mousie-yu                                 *
echo * date:   2012.1.10                                 *
echo * brief:  scons自动化批处理                         *
echo * path:   %~dp0
echo *****************************************************

choice /c:bme /m Build-编译工程,Make-生成工程,Exit-退出
if errorlevel 3 goto End
if errorlevel 2 goto Make
if errorlevel 1 goto Build

:Build
call scons.bat -c
call scons.bat -j %core%
goto Start

:Make
call scons.bat --target=%complier% -s
goto Start

:End
exit

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

发表于 2012-1-11 14:24:11 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-11 18:13:36 | 显示全部楼层
MARKE

出0入9汤圆

发表于 2012-1-11 18:48:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-11 19:08:30 | 显示全部楼层
多谢楼主分享

出0入0汤圆

发表于 2012-1-11 19:18:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-12 08:23:41 | 显示全部楼层
强烈要求置酷啊

出0入0汤圆

发表于 2012-1-12 09:03:08 | 显示全部楼层
mark。一直在用0.3.3版本的,准备假期有空学学V1.0

出0入0汤圆

发表于 2012-1-12 09:14:43 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-1-12 09:26:56 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-1-12 09:50:03 | 显示全部楼层
mark

出110入109汤圆

发表于 2012-1-12 09:51:10 | 显示全部楼层
跟学

出0入0汤圆

发表于 2012-1-12 09:52:04 | 显示全部楼层
实战总结,赞!
建议也直接在rt-thread.org的wiki里写个教程,现在rt-thread的文档化工作比较弱。

出0入0汤圆

发表于 2012-1-12 10:54:18 | 显示全部楼层
MARK.

出0入0汤圆

发表于 2012-1-12 11:49:46 | 显示全部楼层
马克一下

出0入0汤圆

发表于 2012-1-12 14:58:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-13 10:30:15 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2012-2-7 18:44:21 | 显示全部楼层
赞楼主


回复【楼主位】draapho  
-----------------------------------------------------------------------

出0入0汤圆

发表于 2012-2-24 19:11:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-24 20:04:13 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-4-8 13:14:59 | 显示全部楼层
好~~学习中

出0入0汤圆

发表于 2012-10-30 16:07:15 | 显示全部楼层
RT-Thread 编译方式 最好一键到底, 别装东装西, 搞些有的没的, 学 Linux 那样, 啰哩哵唆, 拖泥带水 !
写程式是为了解决麻烦, 而非制造麻烦.

出0入0汤圆

发表于 2012-10-30 17:46:08 | 显示全部楼层
hclin 发表于 2012-10-30 16:07
RT-Thread 编译方式 最好一键到底, 别装东装西, 搞些有的没的, 学 Linux 那样, 啰哩哵唆, 拖泥带水 !
写程 ...

Simple things should be simple, complex things should be possible.

出0入0汤圆

发表于 2012-11-5 11:05:37 | 显示全部楼层
cool                                                  

出0入8汤圆

发表于 2013-3-9 14:48:07 | 显示全部楼层
留记号!

出0入0汤圆

发表于 2013-8-31 00:30:56 | 显示全部楼层
学习了,,,谢谢

出0入0汤圆

发表于 2013-9-14 00:06:15 来自手机 | 显示全部楼层
学习了           多谢

出0入0汤圆

发表于 2013-9-14 01:26:26 | 显示全部楼层
很关心 scons 中的多线程编译是怎么实现的。mdk自身支持这个功能么?或者有没有曲线救国的方法。

出0入0汤圆

发表于 2014-2-12 17:11:23 | 显示全部楼层
学习了mark

出0入0汤圆

发表于 2014-2-20 08:16:35 | 显示全部楼层
mark                                 

出0入0汤圆

发表于 2014-10-21 11:11:44 | 显示全部楼层
好贴,顶学习scon

出0入0汤圆

发表于 2014-10-21 12:53:38 | 显示全部楼层
MARK,跟着学习一下

出0入0汤圆

发表于 2014-10-30 22:06:36 | 显示全部楼层
学会使用操作系统是嵌入式必须修的课程。

出0入8汤圆

发表于 2014-10-31 10:00:24 | 显示全部楼层
mark                                                                  

出0入4汤圆

发表于 2014-10-31 15:12:01 | 显示全部楼层
mark scons

出0入0汤圆

发表于 2014-10-31 16:13:30 | 显示全部楼层
谢谢分享!

出0入0汤圆

发表于 2015-1-14 14:32:07 | 显示全部楼层
按照上面步骤来 出现了这个错误   
.
.
.
*****************************************************
* author: mousie-yu     *
* date: 2012.1.10    *
* brief: scons 自 动化批处理    *
* path:  D:\RT-Thread\RT-Thread_1.2.0\bsp\stm32f10x\
*****************************************************
Build-编译工程,Make-生成工程,Exit-退出 [B,M,E]?B
scons: Reading SConscript files ...
ImportError: No module named building:
  File "D:\RT-Thread\RT-Thread_1.2.0\bsp\stm32f10x\SConstruct", line 11:
    from building import *
scons: Reading SConscript files ...
ImportError: No module named building:
  File "D:\RT-Thread\RT-Thread_1.2.0\bsp\stm32f10x\SConstruct", line 11:
    from building import *
.
.
.
*****************************************************
* author: mousie-yu     *
* date: 2012.1.10    *
* brief: scons 自 动化批处理    *
* path:  D:\RT-Thread\RT-Thread_1.2.0\bsp\stm32f10x\
*****************************************************
Build-编译工程,Make-生成工程,Exit-退出 [B,M,E]?

出0入0汤圆

发表于 2015-11-30 13:04:22 | 显示全部楼层
RT-Thread scons
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-28 20:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表