RT-Thread 的 SCons 构建系统的语法、常用用法,并举例说明如何编写典型的 `Kconfig` 和 `SConscript` 文件

RT-Thread Env工具下 scons命令构建工程 SConscript和Kconfig修改示例 阅读详情

下面我将详细介绍 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_EXAMPLE
    bool "Enable Example Module"
    default n
    help
        Enable 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_EXAMPLE
    bool "Enable Example Module"
    default n
    help
        Enable 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 项目高度模块化、可裁剪、易于维护和扩展。

参考资料

全网第一个比较好的Scons教程 你也可以直接手动指定文件夹下的 文件然后对其编译 我这里用了os的方法来实现的。 阅读详情

相关推荐

RT-Thread开发,使用SCons编译,生成静态库,并进行链接生成MCU程序

寞水

寞水 3063

SCons的使用

一、概述 scons是一个Python写的自动化构建工具,和GNU make相比优点明显: 1、 移植性:python能运行的地方,就能运行scons 2、 扩展性:理论上scons只是提供了python的类,scons使用者可以在这个类的基础上做所有python能做的事情。比如想把一个已经使用了Makefile大型工程切换到scons,就可以保留原来的Makefile,并用python解析

chuanzhilong的博客 1866

核磁干货 | RESTplus实战:静息态fMRI预处理全流程解析

本文详细解析了使用RESTplus工具包进行静息态fMRI数据预处理的完整流程,包括数据准备、环境配置、预处理步骤及高级分析技巧。RESTplus作为基于SPM的批处理工具,以其图形化界面和智能化参数设置显著提升了核磁静息态数据分析的效率,特别适合新手和临床研究人员。文章还分享了实战中的常见问题解决方案和性能优化技巧。

wine的专栏 880

scons基本知识语法

scons 语法 常用命令、函数与定义 scons -c 可以清除生成的临时文件和目标文件,相当于make clean sdons -Q 将产生更少的输出信息 defines= [‘MAIN_DEFINE’] 预定义宏MAIN_DEFINE env.Append(CCCOMSTR=“CC $SOURCES”)定义了编译时的显示格式,若不定义则编译选项非常长,冗余信息非常多,不利于查找有用的错误和警告。还有LINKCOMSTR = “Linking $TARGET” GetCurrentDir() 获得当前

yhjhaha的博客 8843

Windows系统下LaTeX环境搭建与编辑器配置全攻略

本文详细介绍了在Windows系统下搭建LaTeX环境的完整流程,包括TeX Live的安装、TeXStudio编辑器的配置优化以及常见问题排查。特别针对中文用户推荐使用清华镜像源加速下载,并提供了XeLaTeX编译器配置、中文支持等实用技巧,帮助用户快速上手LaTeX文档编写。

weixin_42554408的博客 449

基于FreeRTOS与MQTT的物联网技术应用系列——步进电机控制(三)SD卡驱动、FatFS等的移植和ini配置文件读取的实现

本文实现了基于STM32F107VC的金牛开发板的基于SPI模式的SD卡驱动和FatFS的移植,以及利用minini库对ini配置信息文件进行读取。

sqshining的专栏 2136

RT-Thread 12. BSP根目录下SConscript分析

(1)menuconfig 命令通过读取工程的各个Kconfig 文件,生成配置界面供用户配置内核,最后所有配置相关的宏定义都会自动保存到 BSP 目录里的rtconfig.h 文件中,每一个 BSP 都有一个 rtconfig.h 文件,也就是这个 BSP 的配置信息。(2)SCons 使用 SConscript 和 SConstruct 文件来组织源码结构,通常来说一个项目只有一 SConstruct,但是会有多个 SConscript。

TrueLink的博客 1059

光伏逆变器在环测试解决方案

光伏行业是利用太阳能光辐射将其转化为可用电能的行业。近年来,为应对气候变化和能源安全等挑战,全球对清洁能源的需求不断增长。太阳能作为最具潜力和可再生的能源之一,被视为替代传统化石能源的重要选择,光伏行业因此得到了迅猛发展,并在全球范围内得到了广泛应用。许多国家和地区都将光伏技术作为关键的能源发展方向。尤其是在新兴和发展中国家,光伏发电具有巨大的增长潜力,将成为未来市场竞争的重点。随着规模化生产的推进,光伏组件的制造成本不断降低。

shiwei0813的博客 959

SConscript脚本分享

看了mongo中的SConscript,写了个sconscript,麻烦主要在于动态target,还有就是unit test的引入,写完这个,用scons写一套组建系统应该没问题了。 # -*- mode: python; -*- # build script for Cabinet # this requires scons # you can get from http://www.s

jollyjumper的专栏 1万+

基于YOLOv8n的FPGA无PS端PL部署完整实现方案

本文提出了一种将YOLOv8n目标检测模型完整部署到FPGA纯PL端的实现方案。通过PyTorch训练和INT8量化技术,结合Vitis AI工具链,将模型转换为适合FPGA实现的硬件描述。方案详细阐述了从模型训练、量化校准到FPGA硬件设计的全流程,重点解决了无PS端部署的架构设计、资源优化和实时性保障等关键技术挑战。实验结果表明,该方案在Xilinx Virtex-690T FPGA上实现了30FPS以上的实时目标检测性能,为边缘计算场景提供了高效的硬件加速解决方案。

huanghm88的专栏 506

Open3D 进阶(32)渐进三角网(PTD)地面滤波

渐进三角网地面滤波算法(Progressive TIN Densification, PTD)是一种广泛应用于机载LiDAR点云数据处理的滤波方法,旨在从复杂场景中精确分离地面点,以生成数字高程模型(DEM)。

点云侠的博客 1533

SConscript 脚本入门教程

SCons 是一个现代化的构建工具,用于自动化软件构建过程,类似于 Make 但功能更强大、语法更简洁。SConstruct:是 SCons 的主配置文件,通常在项目根目录,相当于 MakefileSConscript:是子配置文件,用于组织大型项目,可被 SConstruct 或其他 SConscript 包含构建过程:将源代码转换为可执行文件的过程(编译、链接等)SCons 使用 Python 语法,因此如果你熟悉 Python,学习 SCons 会更容易。

SundayBear的博客 1555

提交 ieee 手稿出现:Do not include the Reviewer PDF with my submission 怎么办

IEEE投稿Reviewer PDF选项说明 投稿时出现的"Do not include the Reviewer PDF with my submission"选项控制是否附带评审专用PDF文件。Reviewer PDF是系统自动生成包含所有投稿材料的完整PDF,用于同行评审。建议保持默认不勾选状态,除非确认编辑部不需要该文件,否则可能影响审稿流程。勾选表示不附带此PDF,不勾选则会正常生成并提交该评审文件。

ZhangJiqun&191cm&85kg 2170

SConscript文件在SCons中的作用

Sconscript介绍

Andy的博客 627

Altium Designer(AD24)导入DDB库文件(Protel 99SE)方法

Altium Designer和Protel均为Altium公司开发的软件。本文介绍Altium Designer 24软件导入DDB库文件(Protel 99SE)方法。

fydar的博客 1974

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

RT-Thread 多级目录 scons 构建

RT-Thread 多级目录 scons 构建

坚韧与专注 1305

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Scons使用教程

1. 简单编译 2.SConstruct文件 3.编译多个源文件 4. 编译和链接库文件 5. 节点对象 6. 依赖性 7. 环境 1.简单编译 源文件:hello.cpp #include<iostream> using namespace std; int main() { cout << "Hello, World!" &l...

蓬莱道人的博客 2万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【转载】scons基础用法介绍举例

读目录(Content) 1.概述 2.scons文件 3.scons的命令行参数 4.SConstruct提供的方法 4.1 Program:生成可执行文件 4.2 Object:生成目标文件 4.3 Library:生成静态/动态库文件 4.4 SourceSignatures:判断源文件是否修改 4.5 TargetSignatures:判断目标文件是否改变 ...

勤学如春起之苗,不见其增,日有所长! 辍学如磨刀之石,不见其损,日有所亏! 2298

scons 脚本详解

scons 脚本

pizziars的专栏 975

【c++】Scons|scons对比make

Sconsmake如果只有少数几个文件修改过,make 工具知道仅仅需要对哪些文件重新编译,缩短编译的时间。虽然如此,但是 make 规则复杂,即使是有经验的开发者也望而生畏。Scons是它的同类产品,也可以说是升级产品。做的事情跟make一样,但更简单,更容易。SconsScons是一个开放源码、以Python语言编码的自动化构建工具,可用来替代make编写复杂的makefile。并且scons是跨平台的,只要scons脚本写的好,可以在Linux和Windows下随意编译。.........

我的笔记本 6204

rt-thread 如何添加配置自定义文件

rt-thread添加源文件和进行menuconfig配置

Jonelis的博客 2811

scons 实践笔记(3)--模块编译

当源代码是模块结构时,模块编译重要性不言而喻,模块编译要用到scons的另一个脚本文件:SConscript。一个工程一般只有一个SConstruct文件,却可以有多个SConscript,可以说SConscript正是为模块编译而生。    整个实践工程目录结构: |--------module_test             |-----------app(main.c,SCo

woyaozuo2012的专栏 9212

RTT学习 开发环境搭建

Kconfig用来配置内核,menuconfig命令通过读取工程的各个KConfig文件,生成配置界面供用户配置内核,最后所有配置相关的宏定义都会自动保存到BSP目录里的rtconfig.h文件中,每个BSP都有一个rtconfig.h文件,这也就是BSP的配置信息。同样以上文提到的hello.c和hello.h为例,需要把他们作为一个单独的模块管理,并且在MDK或者IAR的工程文件里有自己的分组,且可以通过menuconfig选中是否使用这个模块。这里要介绍一个新的文件Kconfig。

Caramel_biscuit的博客 1010

scons的使用

1、支持多目录编译(类似于CmakeLists.txt),将多个目录的串起来 Sconconstruct在最顶层 SConscript文件可以层层包含 Sconscript([‘common/SConscript’,‘plugins/Sconscript’]) 在common下: Sconscript([‘src/SConscript’,‘include/SConscript’]) 在plugins下: Sconscript([‘display/SConscript’,‘system/SConscript’

Feng_8071的博客 1592

SCons

SCons 是一套由 Python 语言编写的开源构建系统,类似于 GNU Make。它采用不同于通常 Makefile 文件的方式,而是使用 SConstruct 和 SConscript 文件来替代。这些文件也是 Python 脚本,能够使用标准的 Python 语法来编写。所以在 SConstruct、SConscript 文件中可以调用 Python 标准库进行各类复杂的处理,而不局限于 Makefile 设定的规则。

l00102795的博客 903
上一篇: rt thread studio 和 KEIL对于使用rt thread 的中间件和组件,哪个更方便
下一篇: 通俗的解释一下以太网中的端口号
ftdlk
博客等级 码龄12年 106粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值