diff --git a/development-tools/build-config-system/SCons.md b/development-tools/build-config-system/SCons.md index 633503df1e3f0dc98c7b3bf61c09d634b31532c4..2109c3ab6d31957b6275e4dfe1ceb60eeb68de1b 100644 --- a/development-tools/build-config-system/SCons.md +++ b/development-tools/build-config-system/SCons.md @@ -1,8 +1,6 @@ # SCons -## 1 构建工具(系统) - -### 1.1 什么是构建工具(系统) +### 什么是构建工具 构建工具 (software construction tool) 是一种软件,它可以根据一定的规则或指令,将源代码编译成可执行的二进制程序。这是构建工具最基本也是最重要的功能。实际上构建工具的功能不止于此,通常这些规则有一定的语法,并组织成文件。这些文件用来控制构建工具的行为,在完成软件构建之外,也可以做其他事情。 @@ -10,17 +8,17 @@ 由于历史原因,Makefile 的语法比较混乱,不利于初学者学习。此外在 Windows 平台上使用 Make 也不方便,需要安装 Cygwin 环境。为了克服 Make 的种种缺点,人们开发了其他构建工具,如 CMake 和 SCons 等。 -### 1.2 RT-Thread 构建工具 +### RT-Thread 构建工具 RT-Thread 早期使用 Make/Makefile 构建。从 RT-Thread 0.3.0 开始,RT-Thread 开发团队逐渐引入了 SCons 构建系统,引入 SCons 唯一的目是:使大家从复杂的 Makefile 配置、IDE 配置中脱离出来,把精力集中在 RT-Thread 功能开发上。 有些读者可能会有些疑惑,这里介绍的构建工具与 IDE 有什么不同呢?IDE 通过图形化界面的操作来完成构建。大部分 IDE 会根据用户所添加的源码生成类似 Makefile 或 SConscript 的脚本文件,在底层调用类似 Make 或 SCons 的工具来构建源码。 -## 2 SCons 简介 +## SCons 简介 SCons 是一套由 Python 语言编写的开源构建系统,类似于 GNU Make。它采用不同于通常 Makefile 文件的方式,而是使用 SConstruct 和 SConscript 文件来替代。这些文件也是 Python 脚本,能够使用标准的 Python 语法来编写。所以在 SConstruct、SConscript 文件中可以调用 Python 标准库进行各类复杂的处理,而不局限于 Makefile 设定的规则。 -### 2.1 RT-Thread中Scons的脚本结构 +### RT-Thread中Scons的脚本结构 SCons 使用 SConscript 和 SConstruct 文件来组织源码结构并进行构建,SConstruct是scons构建的主脚本,SConscript存放在源代码的子目录下,通常放在项目的子目录,以达到分层构建的目的。一个项目 (BSP) 只有一 SConstruct,但是会有多个 SConscript。一般情况下,每个存放有源代码的子目录下都会放置一个 SConscript。 @@ -46,25 +44,15 @@ SCons 使用 SConscript 和 SConstruct 文件来组织源码结构并进行构 RT-Thread当前的构建系统由以下几个部分组成: -```mermaid -flowchart LR - A(RT-Thread构建系统)-->Kconfig - A(RT-Thread构建系统)-->rtconfig.py - A(RT-Thread构建系统)-->SCons - SCons --> SConscript - SCons --> SConstruct - SConscript --> Scons标准函数 - SConscript --> RT-Thread自定义函数 - SConscript --> Python函数 -``` +![buildconfig20](./figures/buildconfig20.png) -## 3 SCons 基本命令 +## 常用 SCons 命令 RT-Thread 构建系统支持多种编译器。目前支持的编译器包括 ARM GCC、MDK、IAR、VisualStudio、Visual DSP。主流的 ARM Cortex M0、M3、M4 平台,基本上 ARM GCC、MDK、IAR 都是支持的。有一些 BSP 可能仅支持一种,读者可以阅读该 BSP 目录下的 rtconfig.py 里的 CROSS_TOOL 选项查看当前支持的编译器。 打开 Env 工具,如果是 ARM 平台的芯片,输入 scons 命令直接编译 BSP,这时候默认使用的是 ARM GCC 编译器,因为 Env 工具带有 ARM GCC 编译器。 如下图所示使用 `scons` 命令编译 BSP。 -![使用 scons 命令编译 stm32f10x-HAL BSP](figures/b1e0b39d090bfc4640958ffdb11d9741.png) +![使用 scons 命令编译 stm32f10x-HAL BSP](figures/stm32f10x.png) 如果用户要使用其他的 BSP 已经支持的编译器编译工程,或者 BSP 为非 ARM 平台的芯片,那么不能直接使用 scons 命令编译工程,需要自己安装对应的编译器,并且指定使用的编译器路径。在编译工程前,可以在 Env 命令行界面使用下面的 2 个命令指定编译器为 MDK 和编译器路径为 MDK 的安装路径: @@ -185,11 +173,11 @@ er\inc -ILibraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x -IF:\Project\git\rt-thre ... ``` -## 4 SCons 函数 +## SCons 函数 本章节将介绍在使用编写 SConscript 脚本中常用的函数,包含 SCons 原生标准函数以及RT-Thread扩展的函数。关于 SCons 原生标准函数,在 [SCons](http://www.scons.org/doc/production/HTML/scons-user/index.html) 的网站上可以找到详细的 SCons 原生函数介绍。 -### 4.1 Scons 原生标准函数 +### Scons 原生标准函数 #### 4.1.1 Import(vars) @@ -245,7 +233,7 @@ src = ['shell.c', 'msh.c'] src = Glob('shell.c') ``` -### 4.2 RT-Thread 自定义 Scons 函数 +### RT-Thread 自定义 Scons 函数 #### 4.2.1 SrcRemove(src, remove) @@ -315,9 +303,9 @@ if GetDepend('MSH_USING_BUILT_IN_COMMANDS'): # 判断是否启用MSH的内建命 Sconscript 脚本中可以使用任何 Python 库函数,使用方式和正常的 Python 脚本无异。这也是 Scons 构建工具强大之处所在,可以借助 Python 灵活的语法和丰富的库,完成 CMake 或者 Makefile 无法做到的事情。例如可以导入 os 标准库,实现对文件和目录的相关操作。 -## 5 Scons 函数在 SConscript 中的经典示例 +## Scons 构建示例 -下面我们将以几个 SConscript 为例讲解 scons 构建工具的使用方法。 +下面我们将以几个 SConscript 为例讲解如果使用 scons 构建。 ### 5.1 构建一个基本的 Group diff --git a/development-tools/build-config-system/figures/buildconfig20.png b/development-tools/build-config-system/figures/buildconfig20.png new file mode 100644 index 0000000000000000000000000000000000000000..f43d60a3b2650052878fc51026d78dc5665f3b79 Binary files /dev/null and b/development-tools/build-config-system/figures/buildconfig20.png differ diff --git a/development-tools/build-config-system/figures/b1e0b39d090bfc4640958ffdb11d9741.png b/development-tools/build-config-system/figures/stm32f10x.png similarity index 100% rename from development-tools/build-config-system/figures/b1e0b39d090bfc4640958ffdb11d9741.png rename to development-tools/build-config-system/figures/stm32f10x.png