RT-Thread 学习笔记(三)---用SCons 构建编译环境

软件环境:Win7,Keil MDK 4.72a, IAR EWARM 7.2, GCC 4.2,Python 2.7 ,SCons 2.3.2

硬件环境:Armfly STM32F103ZE-EK  v3.0开发板



 参考文章

【1】RT-Thread 用户手册


1 关于SCons构建工具

手册第10章是这样描述的:SCons是一套由Python语言编写的开源构建系统,类似于GNU Make。它采用不同于通常Makefile文件的SConstruct和SConscript文件。这些文件也是Python脚本,能够使用标准的Python语法来编写。所以在SConstruct、SConscript文件中可以调用Python标准库进行各类复杂的处理,而不局限于Makefile设定的规则。在SCons的网站上可以找到详细的SCons用户手册。

2 下载并安装NotePad++文本编辑工具

【1】Notepad++简介
Notepad++是一套非常有特色的自由软件的纯文字编辑器(许可证:GPL),有完整的中文化接口及支持多国语言编写的功能(UTF8 技术)。它的功能比 Windows 中的 Notepad(记事本)强大,除了可以用来制作一般的纯文字说明文件,也十分适合当作编写电脑程序的编辑器。Notepad++ 不仅有语法高亮度显示,也有语法折叠功能,并且支持宏以及扩充基本功能的外挂模组。
Notepad++是一款非常有特色的编辑器,是开源软件,可以免费使用。支持的语言: C, C++ , Java , C#, XML,SQL,Ada, HTML, PHP, ASP, AutoIt, 汇编, DOS批处理, Caml, COBOL, Cmake, CSS, D, Diff, ActionScript, Fortran, Gui4Cli, HTML, Haskell, INNO, JSP, KIXtart, LISP, Lua, Make处理(Makefile), Matlab, INI文件, MS-DOS Style, NSIS, Normal text, Objective-C, Pascal,Python,Javascript,VerilogHaskellInnoSetupCMake,
VHDLAdaCaml、AutoItKiXtart、Matlab.
其功能有:
  1. 内置支持多达27种语法高亮度显示(包括各种常见的源代码、脚本,能够很好地支持 .nfo 文件查看),还支持自定义语言;
  2. 可自动检测文件类型,根据关键字显示节点,节点可自由折叠/打开,还可显示缩进引导线,代码显示得很有层次感;
  3. 可打开双窗口,在分窗口中又可打开多个子窗口,显示比例;
  4. 提供了一些有用工具,如 邻行互换位置、宏功能,等……
  5. 可显示选中的文本的字节数 (而不是一般编辑器所显示的字数,这在某些情况下,比如软件本地化很方便);
  6. 正则匹配字符串及批量替换;
  7. 强大的插件机制,扩展了编辑能力,如Zen Coding。
详细内容请参见百度百科 Notepad++

【2】下载并安装
Notepad++下载地址: 点击打开链接。安装过程比较简单,这里不再敖述。

3 建立RT-Thread/bsp下的应用分支


【1】将RT-Thread/bsp目录下的stm32f10x文件夹及其内容复制一份并重命名成stm32f103ze-ek,这是Armfly公司出的一款开发板,如下图。
RT-Thread 学习笔记(三)---用SCons 构建编译环境_第1张图片


【2】进入此目录下,用Notepad++打开rtconfig.py,如下,红色粗体字部分需要根据自己的实际开发环境修改
import os
# toolchains options
ARCH='arm'
CPU='cortex-m3'
CROSS_TOOL=' Keil'
if os.getenv('RTT_CC'):
 CROSS_TOOL = os.getenv('RTT_CC')
#device options
# STM32_TYPE =
# 'STM32F10X_LD','STM32F10X_LD_VL',
# 'STM32F10X_MD','STM32F10X_MD_VL',
# 'STM32F10X_HD','STM32F10X_HD_VL',
# 'STM32F10X_XL','STM32F10X_CL'
STM32_TYPE = 'STM32F10X_HD'
# lcd panel options
# 'FMT0371','ILI932X', 'SSD1289'
RT_USING_LCD_TYPE = 'SSD1289'
# cross_tool provides the cross compiler
# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR
if  CROSS_TOOL == 'gcc':
 PLATFORM  = 'gcc'
 EXEC_PATH  = r'C:\Program Files\CodeSourcery\Sourcery_CodeBench_Lite_for_ARM_EABI\bin'
elif CROSS_TOOL == 'keil':
 PLATFORM  = 'armcc'
 EXEC_PATH  = 'C:/Keil'
elif CROSS_TOOL == 'iar':
 PLATFORM  = 'iar'
 IAR_PATH  = r'C:\Program Files\IAR Systems\Embedded Workbench 7.0'
if os.getenv('RTT_EXEC_PATH'):
 EXEC_PATH = os.getenv('RTT_EXEC_PATH')
BUILD = 'debug' #this is a debug version
... ...

【3】保存并编译

编译技巧提示:每次打开命令终端输入命令进入到工作目录下对于打字比较慢的人来说比较费时的事,新建一个批处理文件可以节省点时间,将下面内容复制到一个记事本里然后重命名成一个xxx.bat文件就可以了。

echo RTT bat
E:  
cd \RTT\apingrtt\rt-thread-1.2.2\bsp\stm32f103ze-ek
::pause
cmd.exe

然后就可以编译了。

出现错误,如下图:

RT-Thread 学习笔记(三)---用SCons 构建编译环境_第2张图片

再打开keil MDK的options,如下图。

RT-Thread 学习笔记(三)---用SCons 构建编译环境_第3张图片

对照下系统变量,发现系统变量列表中没有RT_CC,所以rtconfig.py中的判断条件为假,而RT_ROOT=E:\RT_Thread需要修改下,因为这里RTT_ROOT的变量值为RTT源码根目录,这个变量在顶级SConstruct文件中用到,修改结果如下图。

RT-Thread 学习笔记(三)---用SCons 构建编译环境_第4张图片

然后在运行scons --target=mdk4 -s,如下图。

再次用keil去打开此目录下的工程文件,然后打开options,看看,如下图。

RT-Thread 学习笔记(三)---用SCons 构建编译环境_第5张图片

根目录已经起作用了。

在命令终端进入到stim32f103zet_v5(baiwei)目录下,运行scons -c,清除之前的编译结果。然后运行scons 重新编译,结果如下:

RT-Thread 学习笔记(三)---用SCons 构建编译环境_第6张图片

【4】经编译输出目录设置为不收版本监控。

Git 中的文件忽略
1. 共享式忽略新建 .gitignore 文件,放在工程目录任意位置即可。.gitignore 文件可以忽略自己。忽略的文件,只针对未跟踪文件有效,对已加入版本库的文件无效。
2. 独享式忽略针对具体版本库 :.git/info/exclude针对本地全局:  git config --global core.excludefile ~/.gitignore
忽略的语法规则:

"#"表示注释;

以斜杠“/”开头表示目录;

以星号“*”通配多个字符,即"*" 表示任意多个字符;

以问号“?”通配单个字符,即"?" 代表一个字符;

以方括号“[]”包含单个字符的匹配列表;

以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;

 ([abc]) 代表可选字符范围

此外,git 对于 .ignore 配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;

如果名称最前面是路径分隔符“/”,表示忽略的该文件在此目录下。
如果名称的最后面是 “/” ,表示忽略整个目录,但同名文件不忽略。
通过在名称前面加 “!”,代表不忽略。
例子如下:
# 这行是注释
*.a                   # 忽略所有 .a 伟扩展名的文件
!lib.a                # 但是 lib.a 不忽略,即使之前设置了忽略所有的 .a
/TODO            # 只忽略此目录下 TODO 文件,子目录的 TODO 不忽略
build/               # 忽略所有的 build/ 目录下文件,注意,不管是根目录下的 /build/ 目录,还是某个子目录 /child/build/ 目录,都会被忽略;
doc/*.txt           # 忽略如 doc/notes.txt, 但是不忽略如 doc/server/arch.txt

打开git shell窗口进入到根目录下,git cat .gitignore,如下图。
RT-Thread 学习笔记(三)---用SCons 构建编译环境_第7张图片

可以看到,build目录已经加入到被忽略列表。
【5】将新应用分支上传都远程版本库中
输入git add .或者git add stm32f103zet6_v5(baiwei) 回车
输入git commit -m "stm32f103zet6_v5(baiwei)" 回车
输入git push origin master 回车,结果如下图。
RT-Thread 学习笔记(三)---用SCons 构建编译环境_第8张图片




你可能感兴趣的:(RT-Thread,RTT,git,scons)