Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
RT-Thread中scons使用详细说明
发布于 2010-11-19 17:15:13 浏览:24634
订阅该版
前提条件: 1. 针对于RT-Thread 0.4.0版本的scons 2. 可能会和当前svn中的SConstruct、SConscript文件编写方式有些区别。 追寻目标: 简化工程管理,提供给用户最大的便利性。 ![cmd.png](https://oss-club.rt-thread.org/uploads/53_e045ae7bdc4d746109a7b4903077694c.png) ![错误截图.jpg](https://oss-club.rt-thread.org/uploads/2590_101317c11fd8bbf28a0b44bdd85a59ee.jpg) ![scons.jpg](https://oss-club.rt-thread.org/uploads/3505_3a3d215ca34e7b1ba5dec4936b2f8ae8.jpg) ![23.JPG](https://oss-club.rt-thread.org/uploads/3643_33561cfb88fff68532daf94f25095884.jpg) ![65.JPG](https://oss-club.rt-thread.org/uploads/3643_33782fa94ca0a3b3af267dab483e21b3.jpg) ![新建 BMP 图像 (2).JPG](https://oss-club.rt-thread.org/uploads/3643_dd122d100dfe9de0bc565e9401e7fcdb.jpg) ![新建 BMP 图像.JPG](https://oss-club.rt-thread.org/uploads/3643_dd1fa8d5068a051438c8836a870b648b.jpg)
查看更多
20
个回答
默认排序
按发布时间排序
bernard
2010-11-19
这家伙很懒,什么也没写!
安装: 需要安装python 2.5.x scons 1.x或2.x 下载链接: [http://www.rt-thread.org/download/python-2.5.2.msi](http://www.rt-thread.org/download/python-2.5.2.msi) [http://www.rt-thread.org/download/scons-2.0.1.win32.exe](http://www.rt-thread.org/download/scons-2.0.1.win32.exe) 采用默认安装方式即可,假设把python安装在C:驱动器下(Linux下,一般默认携带python,只需要安装个scons即可,例如ubuntu,可以直接用apt-get等方式来安装)。 当安装好时,scons的运行脚本默认是放置于C:Python25Scripts目录下,为了便利的调用scons,建议把这个目录加入到你的windows可执行路径中去。 好了后,在cmd命令行窗口,输入如下命令,应该会有相类似的输出: [attach]0[/attach] 其中,如果未在windows可执行路径中加入C:Python25Scripts,可以按照上面的方式,仅在当前命令行窗口中加入这个路径。
bernard
2010-11-19
这家伙很懒,什么也没写!
新添加一个bsp需要准备的scons脚本: 1. 这个分支目录下的SConstruct文件; 2. 这个分支目录下的SConscript文件; 3. 这个分支目录下的编译配置文件:rtconfig.py 4. 整个分支的 RT-Thread配置文件:rtconfig.h SConstruct文件是scons所接受的编译脚本主文件,它包含了一些基本的变量信息,以下的是一个脚本范例: ``` import os import sys import rtconfig RTT_ROOT = os.path.normpath(os.getcwd() + '/../..') sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] from building import * TARGET = 'rtthread-stm32.' + rtconfig.TARGET_EXT env = Environment(tools = ['mingw'], AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, AR = rtconfig.AR, ARFLAGS = '-rc', LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) env.PrependENVPath('PATH', rtconfig.EXEC_PATH) Export('RTT_ROOT') Export('rtconfig') # prepare building environment objs = PrepareBuilding(env, RTT_ROOT) # STM32 firemare library building script objs = objs + SConscript(RTT_ROOT + '/bsp/stm3210/Libraries/SConscript', variant_dir='bsp/Libraries', duplicate=0) # build program env.Program(TARGET, objs) # end building EndBuilding(TARGET) ``` 这个小节 ``` # STM32 firemare library building script objs = objs + SConscript(RTT_ROOT + '/bsp/stm3210/Libraries/SConscript', variant_dir='bsp/Libraries', duplicate=0) ``` 能够让一个SConstruct文件再关联一个新的组件(用户自行定义的组件,而不是RT-Thread系统的组件)。 SConscript文件和下节的组件编译文件实际是一样的,因为可以把BSP看成一个组件Group(在工程文件中它也确实是一个Group),所以这个组件所对应的编译脚本就是SConscript,以下的是一个脚本范例: ``` 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将会自动寻找这个组件,并检查它的依赖关系,如果依赖关系满足,将自行把这个组件添加到编译过程中。 rtconfig.py编译配置文件主要指定编译器,编译器路径以及编译时的参数: ``` # toolchains options ARCH='arm' CPU='stm32' CROSS_TOOL='keil' if CROSS_TOOL == 'gcc': PLATFORM = 'gcc' EXEC_PATH = 'D:/SourceryGCC/bin' elif CROSS_TOOL == 'keil': PLATFORM = 'armcc' EXEC_PATH = 'E:/Keil' BUILD = 'debug' STM32_TYPE = 'STM32F10X_HD' if PLATFORM == 'gcc': # toolchains PREFIX = 'arm-none-eabi-' CC = PREFIX + 'gcc' AS = PREFIX + 'gcc' AR = PREFIX + 'ar' LINK = PREFIX + 'gcc' TARGET_EXT = 'axf' SIZE = PREFIX + 'size' OBJDUMP = PREFIX + 'objdump' OBJCPY = PREFIX + 'objcopy' DEVICE = ' -mcpu=cortex-m3 -mthumb' CFLAGS = DEVICE + ' -DRT_USING_MINILIBC' AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp' LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread-stm32.map,-cref,-u,Reset_Handler -T stm32_rom.ld' CPATH = '' LPATH = '' if BUILD == 'debug': CFLAGS += ' -O0 -gdwarf-2' AFLAGS += ' -gdwarf-2' else: CFLAGS += ' -O2' POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin ' + SIZE + ' $TARGET ' elif PLATFORM == 'armcc': # toolchains CC = 'armcc' AS = 'armasm' AR = 'armar' LINK = 'armlink' TARGET_EXT = 'axf' DEVICE = ' --device DARMSTM' CFLAGS = DEVICE + ' --apcs=interwork' AFLAGS = DEVICE LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rtthread-stm32.map --scatter stm32_rom.sct' CFLAGS += ' -I' + EXEC_PATH + '/ARM/RV31/INC' LFLAGS += ' --libpath ' + EXEC_PATH + '/ARM/RV31/LIB' EXEC_PATH += '/arm/bin40/' if BUILD == 'debug': CFLAGS += ' -g -O0' AFLAGS += ' -g' else: CFLAGS += ' -O2' POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin fromelf -z $TARGET' ```
bernard
2010-11-19
这家伙很懒,什么也没写!
新添加一个目录或组件需要准备的SConscript脚本: ``` from building import * src = Glob('*.c') group = DefineGroup('name', src, depend = ['RT_USING_NN']) Return('group') ``` DefineGroup用于定义一个组件。组件可以是一个目录(下的文件或子目录),也是后续一些IDE工程文件中的一个Group或文件夹。 这个Group的名字由参数'name'来定义。 src用于定义这个Group中包含的文件,一般指的是C/C++源文件。方便起见,也能够通过Glob函数才有通配符得方式列出SConscript文件所在目录中匹配的文件。 depend用于定义这个Group编译所依赖的选型。编译选型一般指rtconfig.h中定义的RT_USING_xxx宏。当在rtconfig.h配置文件中定义了相应宏时,那么这个Group才会被加入到编译环境中进行编译。如果依赖的宏并没在rtconfig.h中被定义,那么这个Group将不会被加入编译。相类似的,在使用scons生成为IDE工程文件时,如果依赖的宏未被定义,相应的Group也不会在工程文件中出现。 后面还可以加入的参数包括: CCFLAGS -- C源文件编译的参数; CPPPATH -- 应该额外包含的头文件路径; CPPDEFINES -- C源文件编译时额外的宏定义; LINKFLAGS -- 连接时应该添加的参数。
bernard
2010-11-19
这家伙很懒,什么也没写!
高级特性: 通过scons脚本生成Keil MDK工程 当按照RT-Thread规定的方式编写SConscript脚本时,只需要在命令行下执行命令 ``` scons --target=mdk -s ``` 即可在当前目录下活的Keil MDK的工程(这个工程只包括当前rtconfig.h中配置的特性,例如如果其中包含了RT_USING_FINSH的配置,则加入finsh的代码,否则将不加入finsh的代码)。 通过scons脚本生成IAR工程 <未完成>
zynh1020
2010-11-19
这家伙很懒,什么也没写!
>高级特性: >通过scons脚本生成Keil MDK工程 > >当按照RT-Thread规定的方式编写SConscript脚本时,只需要在命令行下执行命令 > > >``` > >scons --target=mdk -s > >``` > > >即可在当前目录下活的Keil MDK的工程(这个工程只包括当前rtconfig.h中配置的特性,例如如果其中包含了RT_USING_FINSH的配置,则加入finsh的代码,否则将不加入finsh的代码)。 > >通过scons脚本生成IAR工程 ><未完成> ---
bernard
2010-11-19
这家伙很懒,什么也没写!
看来当时是范糊涂了,记错了 RT-Thread 0.3.x版本是未包括scons脚本到Keil MDK工程的转换。如果使用mini2440,建议使用svn中trunk的版本,即RT-Thread 0.4.x分支,这个分支能够支持转换成Keil MDK来使用。
mail2li
2011-01-28
这家伙很懒,什么也没写!
如果我需要针对调试和发布在 一个project中定义release/debug/...等多个targets 应该如何操作呢?
rdghx
2011-02-09
这家伙很懒,什么也没写!
rtconfig.py 中,有定义BUILD = 'debug' ,依此套用
zx2591
2011-09-29
这家伙很懒,什么也没写!
每次都要输一堆命令,感觉比较麻烦,偷了个懒,在C:windows中建了个文件setscons.bat, 里面写了几行命令: set PATH=C:Python27Scripts;%PATH% D: cd D:桌面RTTRT-Thread-0.4.0 beta2 t-threadspstm32f10x scons --target=mdk -s [attach]0[/attach] 但是编译提示少一个文件key.c,会产生一个空的build文件夹,怎么处理啊?这有文件是在哪定义的,如果不要紧的话,我想把那个文件相关的定义删除,它是在哪里定义的?如果需要这个文件,写这个文件哪些函数是必须要的?需要哪些头文件?老大帮个忙提示一下。
prife
2011-09-30
这家伙很懒,什么也没写!
很简单,以mini2440为例,你看一下BSP/mini2440目录下 的 SConscript文件和SConstruct文件,其中key.c 应该在SConscript中写了。去掉试试。
撰写答案
登录
注册新账号
关注者
0
被浏览
24.6k
关于作者
bernard
这家伙很懒,什么也没写!
提问
414
回答
5940
被采纳
76
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
开源共生 商业共赢 | RT-Thread 2024开发者大会议程正式发布!
2
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
3
RT-Thread EtherKit开源以太网硬件正式发布
4
如何在master上的BSP中添加配置yml文件
5
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
MicroPython
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
19
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
6
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
5
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部