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

news2024/11/26 23:33:12

(1)menuconfig 命令通过读取工程的各个Kconfig 文件,生成配置界面供用户配置内核,最后所有配置相关的宏定义都会自动保存到 BSP 目录里的rtconfig.h 文件中,每一个 BSP 都有一个 rtconfig.h 文件,也就是这个 BSP 的配置信息。
(2)SCons 使用 SConscript 和 SConstruct 文件来组织源码结构,通常来说一个项目只有一 SConstruct,但是会有多个 SConscript。一般情况下,每个存放有源代码的子目录下都会放置一个 SConscript。
为了使 RT-Thread 更好的支持多种编译器,以及方便的调整编译参数,RT-Thread 为每个 BSP 单独创建了一个名为 rtconfig.py 的文件。因此每一个 RT-Thread BSP 目录下都会存在下面三个文件:rtconfig.py、SConstruct 和 SConscript,它们控制 BSP 的编译。一个 BSP 中只有一个 SConstruct 文件,但是却会有多个 SConscript 文件,可以说 SConscript 文件是组织源码的主力军。RT-Thread 大部分源码文件夹下也存在 SConscript 文件,这些文件会被 BSP 目录下的 SConscript 文件 “找到” 从而将 rtconfig.h 中定义的宏对应的源代码加入到编译器中来。
(3)rtconfig.py 是一个 RT-Thread 标准的编译器配置文件,控制了大部分编译选项,是一个使用 python语言编写的脚本文件,主要用于完成以下工作:
• 指定编译器(从支持的多个编译器中选择一个你现在使用的编译器)。
• 指定编译器参数,如编译选项、链接选项等。
当我们使用 scons 命令编译工程时,就会按照 rtconfig.py 的编译器配置选项编译工程。

1. 参考

https://zhuanlan.zhihu.com/p/645748713
在这里插入图片描述

2 .实际SConscript分析
# for module compiling
import os	#导入 Python 系统编程 os 模块,可以调用 os 模块提供的函数用于处理文件和目录
Import('RTT_ROOT')
from building import *		#把 building 模块的所有内容全都导入到当前模块,后面用到的 Define Group 定义在这个模块

cwd = GetCurrentDir()	#获得当前路径并保存到字符串变量 cwd 中
objs = []	#定义了一个空的 list 型变量 objs
list = os.listdir(cwd)		#得到当前目录下的所有子目录,并保存到变量 list 中

for d in list:	#for 循环会遍历一遍 BSP 的所有子目录
    path = os.path.join(cwd, d)	#具体操作是取出一个当前目录的子目录,利用 os.path.join(cwd,d) 拼接成一个完整路径
    if os.path.isfile(os.path.join(path, 'SConscript')):	#判断这个子目录是否存在一个名为 SConscript 的文件
        objs = objs + SConscript(os.path.join(d, 'SConscript'))	#使用了 SCons 提供的一个内置函数 SConscript(),它可以读入一个新的 SConscript 文件,并将 SConscript 文件中所指明的源码加入到了源码编译列表 objs 中来

Return('objs')	#通过这个 SConscript 文件,BSP 工程所需要的源代码就被加入了编译列表中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1188550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络期末复习-Part1

1、列举几种接入网技术:ADSL,HFC,FTTH,LAN,WLAN ADSL(Asymmetric Digital Subscriber Line):非对称数字用户线路。ADSL 是一种用于通过电话线连接到互联网的技术,它提供…

JS 处理文档选择和范围创建【createRange | getSelection】

介绍 1、const selection window.getSelection(); 说明: 1、用于获取用户当前文档选择的对象; 2、它返回一个 Selection 对象,该对象代表了用户选择的文本范围(可以包含一个或多个范围,因为用户可以同时选择多个不相…

Ubuntu LTS 坚持 10 年更新不动摇

导读Linux 内核开发者 Jonathan Corbet 此前在欧洲开源峰会上宣布,LTS 内核的支持时间将从六年缩短至两年,原因在于缺乏使用和缺乏支持。稳定版内核维护者 Greg Kroah-Hartman 也表示 “没人用 LTS 内核”。 近日,Ubuntu 开发商 Canonical 发…

mybatis嵌套查询子集合只有一条数据

我们再用mybatis做嵌套查询时&#xff0c;有时会遇到子集合只有1条数据的情况&#xff0c;例如下这样&#xff1a; 数据库查询结果 xml <resultMap id"userMap" type"com.springboot.demo.test.entity.User"><id column"uid" property…

拓展认知边界:如何给大语言模型添加额外的知识

Integrating Knowledge in Language Models P.s.这篇文章大部分内容来自Stanford CS224N这门课Integrating Knowledge in Language Models这一节&#x1f601; 为什么需要给语言模型添加额外的知识 1.语言模型会输出看似make sense但实际上不符合事实的内容 语言模型在生成…

抓包工具fiddler的基础知识详解

一、简介 fiddler是位于客户端和服务端之间的http代理 1、作用 监控浏览器所有的http/https流量查看、分析请求内容细节伪造客户端请求和服务器请求测试网站的性能解密https的web会话全局、局部断电功能第三方插件 2、使用场景 接口调试、接口测试、线上环境调试、web性能分…

Git的简介以及基本使用

目录 一.Git的简介 拓展&#xff1a;Git与SVN的区别&#xff08;各自的优点与缺点&#xff09; 二.Git文件的4种状态 三.Git的常用命令 搭建完成之后&#xff0c;将项目文件也上传之后&#xff0c;现在模拟其他人来下载这个代码 今天就分享到这啦&#xff01;&#xff01;…

XX公司数字化项目管理办法

XX公司数字化项目管理办法 Ver2.0 第一章 总则 为规范XX公司项目从立项到结项的过程管理&#xff0c;明确各阶段建设主要工作及交付标准&#xff0c;提升数字化项目总体交付质量&#xff0c;特制定本管理制度。 本制度适用于数字化项目范围内咨询服务类、软硬件实施类项目。…

Power Apps-组件属性

图片组件兼容性 可以选择右侧属性面板中的图像位置&#xff0c;更改为匹配度&#xff0c;兼容性更好 按钮点击事件 Navigate(屏幕名)//跳转到某个页面 Back()//返回上一个页面

GZ038 物联网应用开发赛题第1套

2023年全国职业院校技能大赛 高职组 物联网应用开发 任 务 书 (第1套卷) 工位号:______________ 第一部分 竞赛须知 一、竞赛要求 1、正确使用工具,操作安全规范; 2、竞赛过程中如有异议,可向现场考评人员反映,不得扰乱赛场秩序; 3、遵守赛场纪律,尊重考评人员…

4.Swin Transformer目标检测——训练数据集

1.centos7 安装显卡驱动、cuda、cudnn-CSDN博客 2.安装conda python库-CSDN博客 3.Cenots Swin-Transformer-Object-Detection环境配置-CSDN博客 步骤1&#xff1a;准备待训练的coco数据集 下载地址&#xff1a;https://download.csdn.net/download/malingyu/88519420 htt…

基于GoogleNet深度学习网络的花朵类型识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. GoogleNet网络结构 4.2. 基于GoogleNet的花朵类型识别 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .............................…

PostgreSql中解析JSON字段和解析TEXT中的JSON字段

初始化操作 创建表 CREATE TABLE orders ( "ID" int8 NOT NULL,"info_j" json NOT NULL,"info_t" text NOT NULL );初始化表 INSERT INTO orders("ID", "info_j","info_t") VALUES (1, {"name":&qu…

基于公共业务提取的架构演进——外部依赖防腐篇

背景 有了前两篇的帐号权限提取和功能设置提取的架构演进后&#xff0c;有一个问题就紧接着诞生了&#xff0c;对于诸多业务方来说&#xff0c;关键数据源的迁移如何在各个产品落地&#xff1f; 要知道这些数据都很关键&#xff1a; - 对于帐号&#xff0c;获取不到帐号信息是…

番外篇:Linux中好玩的指令(Ubuntu环境)

前言 我知道&#xff0c;Linux的学习总是枯燥乏味的&#xff0c;今天给大家带来一些好玩的指令&#xff0c;供大家娱乐开心&#xff0c;整理不易&#xff0c;希望大家能够多多支持一下。 1. lolcat指令 输入以下命令即可安装lolcat&#xff1a; sudo apt-get install lolcat 安…

sql注入学习笔记

sql注入原理 掌握sql注入漏洞的原理掌握sql注入漏洞的分类 万能用户名 777 or 11 #原句 select userid from cms_users where username ".$username." and password".md5 ( $password ) ."输入过后为 select userid from cms_users where username …

8-1、T型加减速控制【51单片机控制步进电机-TB6600系列】

摘要&#xff1a;本节介绍步进电机T型加减速的控制方法&#xff0c;本小节主要内容为该控制方法的推导与计算。目前各平台对该控制方法介绍的文章目前较多&#xff0c;但部分关键参数并未给出推导过程&#xff0c;例如误差系数0.676的推导等&#xff0c;本节在现有文章框架下&a…

【算法练习Day43】最佳买卖股票时机含冷冻期买卖股票的最佳时机含手续费

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 最佳买卖股票时机含冷冻期买…

银行转账截图p图制作,电子回执单,建设的,用易语言开发的,分享源码

闲着很无聊&#xff0c;刚好网上找到了一个默认&#xff0c;当然这个模版图我加了水印&#xff0c;只能是娱乐用&#xff0c;做不了啥坏事哈&#xff0c;然后软件是用易语言开发的&#xff0c;一个画板一些标签编辑框快照生成功能实现了这个软件&#xff0c;下面看下我的界面。…

软件安全测试怎么做?如何确保软件授权安全

在数字化不断演进的今天&#xff0c;软件安全测试变得至关重要。它验证了软件是否容易受到网络攻击&#xff0c;并检验恶意或意外输入对操作的影响。安全测试的目标是保障系统和信息的安全性和可靠性&#xff0c;确保它们不接受未授权的输入。 一、安全测试准备 开发者必须认识…