RT-Thread 的 SCons 构建系统的语法、常用用法,并举例说明如何编写典型的 `Kconfig` 和 `SConscript` 文件
下面我将详细介绍 RT-Thread 的 SCons 构建系统的语法、常用用法,并举例说明如何编写典型的 Kconfig
和 SConscript
文件。
一、SCons 构建系统简介
SCons 是一个基于 Python 的自动化构建工具。RT-Thread 采用 SCons 作为其主流工程构建系统,具有如下特点:
- 构建脚本用 Python 语法编写,灵活强大。
- 支持多平台、多工具链。
- 与 Kconfig 配合,实现可配置、可裁剪的组件化开发。
二、SCons 构建脚本基础语法
RT-Thread 项目中,SCons 构建脚本主要有两个文件:
SConstruct
:工程根目录的主构建脚本(一般不用用户修改)。SConscript
:各模块/组件目录下的子构建脚本(用户主要编写和维护)。
1. SConscript 常用语法
1.1 添加源文件
src = Glob('*.c') # 匹配当前目录下所有.c文件
group = DefineGroup('example', src, depend = ['RT_USING_EXAMPLE'], CPPPATH = ['.'])
1.2 添加头文件路径
CPPPATH = ['.', '../include']
1.3 依赖宏控制
depend = ['RT_USING_EXAMPLE']
- 只有在 Kconfig 里配置了
RT_USING_EXAMPLE
,该模块才会被编译。
1.4 组合 DefineGroup
group = DefineGroup('example', src, depend = ['RT_USING_EXAMPLE'], CPPPATH = ['.'])
Return('group')
1.5 递归包含子目录
SConscript('subdir/SConscript')
三、Kconfig 配置文件基础语法
Kconfig 用于配置组件的编译选项,语法与 Linux Kconfig 类似。
1. 基本语法
menu "Example Module"config RT_USING_EXAMPLEbool "Enable Example Module"default nhelpEnable the example module for demonstration.endmenu
menu
/endmenu
:分组显示config
:定义一个配置项bool
:布尔类型(y/n)default
:默认值help
:帮助说明
四、实战举例
1. 目录结构
project/
├── SConstruct
├── Kconfig
├── components/
│ └── example/
│ ├── SConscript
│ ├── Kconfig
│ ├── example.c
│ └── example.h
2. components/example/Kconfig
menu "Example Module"config RT_USING_EXAMPLEbool "Enable Example Module"default nhelpEnable the example module for demonstration.endmenu
3. components/example/SConscript
# 查找所有.c文件
src = Glob('*.c')# 定义编译组
group = DefineGroup('example', src,depend = ['RT_USING_EXAMPLE'], # 依赖于Kconfig中的宏CPPPATH = ['.'] # 头文件路径
)Return('group')
4. 工程根目录 Kconfig
source "$PKGS_DIR/components/example/Kconfig"
5. 工程根目录 SConstruct
一般不用修改,RT-Thread 已经实现好主构建流程。
五、常见用法补充
- 条件编译:通过 Kconfig 宏控制模块是否参与编译。
- 多级目录:可在 SConscript 中递归调用子目录 SConscript。
- 自定义编译选项:DefineGroup 支持 CPPDEFINES、CCFLAGS、LINKFLAGS 等参数。
六、总结
- Kconfig 用于配置和裁剪功能,决定哪些模块参与编译。
- SConscript 用于描述本目录下的源码如何编译、依赖关系、头文件路径等。
- SCons 构建系统让 RT-Thread 项目高度模块化、可裁剪、易于维护和扩展。
参考资料
- RT-Thread 官方文档 - SCons 构建系统
- RT-Thread 官方文档 - Kconfig 配置系统