SCons

什么是构建工具(系统)

构建工具(software construction tool)是一种软件,它可以**根据一定的规则或指令,将源代码编译成可执行的二进制程序。**这是构建工具最基本也最重要的功能。

实际上构建工具的功能不止于此,通过这些规则有一定的语法,并组织成文件。这些文件用来控制构建工具的行为,在完成软件构建之外,也可以做其它事情。

目前最流行的构建工具是GNU Make。很多知名开源软件,如Linux内核就采用Make构建。
Make通过读取Makefile文件来检测文件的组织结构和依赖关系,并完成Makefile中所指定的命令。

由于历史原因,Makefile的语法比较混乱,不利于初学者学习。此外在Windows平台上使用Make也不方便,需要安装Cygwin环境。为了克服Make的种种缺点,人们开发了其它构建工具,如CMake和SCons等。

RT-Thread构建工具

RT-Thread早期使用Make/Makefile构建。从RT-Thread0.3.0开始,RT-Thread开发团队逐渐引入了SCons构建系统,引入SCons唯一的目的是:使大家从复杂的Makefile配置、IDE配置中脱离出来,把精力集中在RT-Thread功能开发上。

有些读者可能会有些疑惑,这里介绍的构建工具与IDE有什么不同呢?
IDE通过图形化界面的操作来完成构建。大部分IDE会根据用户所添加的源码生成类似Makefile或Sconscript的脚本文件,在底层调用类似Make或SCons的工具来构建源码。

SCons简介

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

RT-Thread中Scons的脚本构建

SCons使用SConscript和SConstruct文件来组织源码结构并进行构建,
SConstruct是scons构建的主脚本,SConScript存放在源代码的子目录下,通常放在项目的子目录,以达到分层构建的目的。

一个项目(BSP)只有一个SConstruct,但是会有多个SConscript。
一般情况下,每个存放有源代码的子目录下都会放置一个SConscript。

/
  -- rtconfig.py    ---- 控制SCons构建的配置文件,存放了如工具链,构建参数等配置。
  -- SConscript
  -- SConstruct    ---- SCons的入口脚本,初始化了SCons构建rt-thread所需的必要环境
  -- Kconfig        ---- 顶层Kconfig文件,menuconfig的入口Kconfig文件
  -- rt-thread/
  --- src/
  ---- SConscript   ---- 各级源码的scons子脚本,控制当前级别下的源码构建行为
  ---- Kconfig      ---- 各级源码的Kconfig子脚本,存放当前级别下的配置项
  ---- **.c

为了方便开发者使用SCons,RT-Thread搭建了如上所示的构建框架,
其中包括了一份SCons的入口脚本(SConstruct),以及分散在各级源码的SCons子脚本(Sconscript),还有一份便于配置构建行为的配置脚本(rtconfig.py)。
同时,RT-Thread也在SCons标准接口的基础上,提供了一组用于组织源码工程的扩展接口。开发者在使用时,可以借助RT-Thread提供的扩展接口,更方便的完成源码的组织与配置。

在这里插入图片描述
为了使RT-Thread更好的支持多种编译器,以及方便的调整构建参数,为每个BSP单独创建了一个名为rtconfig.py的配置文件。

因此每一个 RT-Thread BSP 目录下都会存在下面三个文件:rtconfig.py、SConstruct 和 SConscript,它们控制 BSP 的构建。一个 BSP 中只有一个 SConstruct 文件,但是却会有多个 SConscript 文件,可以说 SConscript 文件是组织源码的主力军。

SCons基本命令

RT-Thread构建系统支持多种编译器。
目前支持的编译器包括ARM GCC、MDK、IQR、VisualStudio、Visual DSP。主流的 ARM Cortex M0、M3、M4 平台,基本上 ARM GCC、MDK、IAR 都是支持的。有一些 BSP 可能仅支持一种,读者可以阅读该 BSP 目录下的 rtconfig.py 里的 CROSS_TOOL 选项查看当前支持的编译器。

打开Env工具,如果是ARM平台的芯片,输入scons命令直接编译BSP,这时候默认使用的是ARM GCC编译器。

如果用户要使用其它的BSP已经支持的编译器编译工程,或者BSP为非ARM平台的芯片,那么不能直接使用scons命令编译工程,需要自己安装对应的编译器,并且指定使用的编译器路径。

在编译工程前,可以在Env命令行界面使用下面的2个命令指定编译器为MDK和编译器路径为MDK的安装路径:

set RTT_CC=keil
set RTT_EXEC_PATH=C:/Keilv5

再例如

set RTT_CC=gcc
set RTT_EXEC_PATH=D:\software\RaspberryPi-Pico\gcc\2020-q4-major\bin

scons

在Env命令行窗口进入要编译的BSP工程目录,然后使用此命令可以直接编译工程。
如果执行过 scons 命令后修改了一些源文件,再次执行 scons 命令时,则 SCons 会进行增量编译,仅编译修改过的源文件并链接

scons --target=XXX

如果使用MDK/IAR来进行项目开发,在生成MDK或者IAR工程前,需要检查rtconfig.py文件中EXEC_PATH变量所保存的对应IDE的安装路径是否正确:
在这里插入图片描述
当修改rtconfig.h打开或者关闭某些组件时,需要使用以下命令中的其中一种重新生成对应的定制化的工程,然后在 MDK/IAR 进行编译下载:

scons --target=iar
scons --target=mdk4
scons --target=mdk5

scons --dist

搭建项目框架,使用此命令会在BSP目录下生成dist目录,这便是开发项目的目录结构,包含了RTT源码以及BSP相关工程,不相关的BSP文件夹及libcpu都会被移除,并且可以随意拷贝此工程到任何目录下使用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

03.智慧商城——路由配置

01. 路由配置 - 一级路由 但凡是单个页面,独立展示的,都是一级路由 路由设计: 登录页首页架子 首页 - 二级分类页 - 二级购物车 - 二级我的 - 二级 搜索页搜索列表页商品详情页结算支付页我的订单页 router/index.js 配置一级路由&#x…

基于springboot实现一起来约苗管理系统项目【项目源码】

基于springboot实现一起来约苗平台管理系统演示 Java技术 Java是由Sun公司推出的一门跨平台的面向对象的程序设计语言。因为Java 技术具有卓越的通用性、高效性、健壮的安全性和平台移植性的特点,而且Java是开源的,拥有全世界最大的开发者专业社群&…

Hack_Kid

Hack_Kid 靶机地址:https://download.vulnhub.com/hackerkid/Hacker_Kid-v1.0.1.ova 一、主机发现 发现靶机IP为192.168.80.135 二、端口扫描 发现靶机开启了80、53、9999端口 三、信息收集 1.访问80端口 2.访问9999端口 根据靶场作者的提示,不…

未来服务器操作系统的趋势与展望

摘要: 随着云计算、大数据和人工智能不断的发展,服务器操作系统也需要随之进行新一轮的升级。本文通过分析当前服务器操作系统的现状,探讨了未来服务器操作系统的趋势和展望,并针对一些关键问题提出了解决方案。 一、引言 服务器…

老哥们平日是怎么排查线上问题的?

1、做好监控告警 如果线上出现了问题,我们更多的是希望由监控告警发现我们出了线上问题,而不是等到业务侧反馈。所以,我们需要对核心接口做好监控告警的功能。 2、定位报警层面 如果是业务代码层面的监控报警,那我们应该是可以…

PVE Win平台虚拟机下如何安装恢复自定义备份Win系统镜像ISO文件(已成功实现)

环境: Virtual Environment 7.3-3 Win s2019 UltraISO9.7 USM6.0 NTLite_v2.1.1.7917 问题描述: PVE Win平台虚拟机下如何安装恢复自定义备份Win系统镜像ISO文件 本次目标 主要是对虚拟机里面Win系统备份做成可安装ISO文件恢复至别的虚拟机或者实体机上 解决方案: …

海康Visionmaster-环境配置:MFC 二次开发环境配置方法

1 新建 MFC 工程,拷贝 DLL:VM\VisionMaster4.0.0\Development\V4.0.0 \ComControl\bin\x64 下的所有拷贝到项目工程输出目录下,如下图所示,项目的输出路径是 Dll 文件夹。 2 通过配置 C目录和链接器的方式配置 VM 环境 2.1 C目录下添加附加…

金蝶云星空单据体启用块粘贴

文章目录 金蝶云星空单据体启用块粘贴 金蝶云星空单据体启用块粘贴

c/c++语言算法技巧汇总大复习2

标题前面打*号的为多数考纲范围外的,可以选择性查看 🔗链接:严书代码大全 🔗链接:c/c语言算法技巧汇总大复习1 🔗链接:c/c语言算法技巧汇总大复习2 目录 Dp动态规划入门练习 青蛙跳台阶练习&…

大数据Hadoop之——部署hadoop+hive+Mysql环境(Linux)

目录 一、JDK的安装 1、安装jdk 2、配置Java环境变量 3、加载环境变量 4、进行校验 二、hadoop的集群搭建 1、hadoop的下载安装 2、配置文件设置 2.1. 配置 hadoop-env.sh 2.2. 配置 core-site.xml 2.3. 配置hdfs-site.xml 2.4. 配置 yarn-site.xml 2.5. 配置 ma…

韦东山linux驱动开发学习【常更】

1.linux目录简单介绍 2.直接运行需要在$path路径下

YOLOv7独家原创改进:最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv7独家原创改进:独家首发最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度。 💡对自己数据集改进有效…

AI大模型创意赛秘籍:3要素搞定初赛提交,3步走开发一个网站!

11月10日,飞桨星河社区X智海Mo平台,AI大模型创意应用大赛的首场培训圆满结束!培训过程中的完整网站代码案例,可在报名比赛后获取。 初赛:1码2表3图,快速搞定初赛提交 培训实践营上,Jungle老师分…

BUUCTF 九连环 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 下载附件,解压得到一张.jpg图片。 密文: 解题思路: 1、一张图片,典型的图片隐写。放到Kali中,使用binwalk检测,确认图片中隐藏zip压缩包。 使…

docker 部署日志平台出错汇总

第一次运行elasticsearch:8.11.1镜像,报错如下: [rootmaster ~]# docker run --name es03 --net elastic -p 9200:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.11.1 docker: Error response from daemon: driver failed programmi…

Vue3-admin-template 框架实现表单身份证获取到 出生年月、性别

一. 首先需效验输入身份证信息是否正确&#xff1a; const sfzhChange () > {// 效验身份证号格式const reg /^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/; }; 二.绑定输入框 input 事件&#xff1a; <el-form-item label&q…

一文读懂GPTs的构建与玩法(GPTs保姆级教程)

Rocky Ding 公众号&#xff1a;WeThinkIn 写在前面 【WeThinkIn出品】栏目专注于分享Rocky的最新思考与经验总结&#xff0c;包含但不限于技术领域。欢迎大家一起交流学习&#x1f4aa; 大家好&#xff0c;我是Rocky。 本文将从“什么是GPTs”&#xff0c;“GPTs搭建流程”&am…

聚观早报 |OPPO Reno11系列官宣;荣耀100系列渲染图

【聚观365】11月16日消息 OPPO Reno11系列官宣 荣耀100系列渲染图 AIGC人才需求持续增加 三星声称不打算推出中端折叠屏手机 台积电10月份营收增加 OPPO Reno11系列官宣 今年5月&#xff0c;OPPO推出了OPPO Reno 10系列&#xff0c;包含OPPO Reno10、OPPO Reno10 Pro和OP…

提升pip速度!设置pip全局镜像源,速度飞起!

文章目录 💢 问题 💢💯 解决方案 💯🐾 镜像源🐾 镜像全局配置🍄 Windows系统🍄 Linux和macOS系统🍄 添加环境变量的方式💢 问题 💢 由于“某些网络限制”原因,我们在使用pip安装python模块的时候速度会比较慢,这个时候我们就需要用到一些镜像源,本文将…

基于springboot实现一起来约苗管理系统项目【项目源码】计算机毕业设计

基于springboot实现一起来约苗管理系统演示 Java技术 Java是由Sun公司推出的一门跨平台的面向对象的程序设计语言。因为Java 技术具有卓越的通用性、高效性、健壮的安全性和平台移植性的特点&#xff0c;而且Java是开源的&#xff0c;拥有全世界最大的开发者专业社群&#xff…