当前位置: 首页 > news >正文

2.6 rt-thread实操 SConstruct解析

每个工程都有一个唯一一个SConstruct脚本,是python语法,用来管理所有的SConscript脚本的。

image

 开头几个import为导入几个模块。python中就是类似类的对象,可以直接访问这个对象的成员和方法。

os.getenv,是python标准库中os模块提供的方法,用于读取操作系统的环境变量。

os.path.normpath,是python标准库中os.path模块的一个方法,用于规范会路径字符串,消除其中的冗余元素,如.代表当前目录,...代表父目录,这个函数返回一个规范化的路径字符串,使得该路径指向与原路径相同的位置,但表示形式更加简洁。

image

 

image

os.path.join函数,是python标准库提供的一个路径拼接函数,将两个参数值的路径拼接起来形成一个完成的路径,他会根据操作系统的情况自动选择用/还是\等进行自动拼接。

 sys.path决定了python再导入模块时的搜索顺序,所以sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]的目的,是为了让RTT+tools这个路径下的东西都可以作为导入python导入模块时使用。

rtconfig.TARGET_EXT指的实际上是rtconfig.py这个python模块中的TARGET_EXT变量值,是根据不同系统不同编译器rtconfig.py文件中复制的scons编译程序后的执行文件的后缀名。

image

 

image

 

### 1. `DefaultEnvironment(tools=[])`

- **作用**:设置SCons的默认环境。这里使用一个空的工具列表(`tools=[]`)来初始化默认环境。

- **解释**:SCons在构建时会使用一个默认的构造环境(construction environment)。通过调用`DefaultEnvironment`并传入`tools=[]`,我们创建了一个没有任何构建工具的默认环境。这样做可能是为了避免SCons自动检测系统默认的工具链(如gcc、clang等),从而让我们可以完全自定义构建环境。这在跨平台构建或需要精确控制工具链时非常有用。

### 2. 创建自定义环境:`env = Environment(...)`

- **作用**:创建一个新的构造环境(construction environment),并指定构建工具及其参数。

- **参数详解**:

- `tools = ['mingw']`:指定使用名为'mingw'的工具。这个工具是SCons内置的,用于支持MinGW(Minimalist GNU for Windows)工具链。它会根据MinGW的工具设置一些默认的行为。

- `AS = rtconfig.AS`:汇编器(Assembler)的可执行文件名或路径,从`rtconfig`模块中获取(`rtconfig`是RT-Thread的配置模块)。

- `ASFLAGS = rtconfig.AFLAGS`:汇编器的编译选项(flags)。

- `CC = rtconfig.CC`:C编译器的可执行文件名或路径。

- `CFLAGS = rtconfig.CFLAGS`:C编译器的编译选项。

- `AR = rtconfig.AR`:归档工具(Archiver,用于创建静态库)的可执行文件名或路径。

- `ARFLAGS = '-rc'`:归档工具的选项,`-rc`表示替换已存在的文件并创建新的归档(如果不存在)。

- `CXX = rtconfig.CXX`:C++编译器的可执行文件名或路径。

- `CXXFLAGS = rtconfig.CXXFLAGS`:C++编译器的编译选项。

- `LINK = rtconfig.LINK`:链接器的可执行文件名或路径。

- `LINKFLAGS = rtconfig.LFLAGS`:链接器的选项。

### 3. `env.PrependENVPath('PATH', rtconfig.EXEC_PATH)`

- **作用**:将`rtconfig.EXEC_PATH`添加到环境变量`PATH`的最前面。

- **解释**:

- `PrependENVPath`是SCons环境的一个方法,用于修改构造环境中的环境变量。

- 这里修改的是`PATH`环境变量,将`rtconfig.EXEC_PATH`(通常是工具链的路径,比如交叉编译器的路径)添加到`PATH`的最前面。

- 这样做的目的是确保在后续构建过程中,SCons能够优先使用`rtconfig.EXEC_PATH`路径下的工具(如gcc、ar、ld等),而不是系统默认路径下的工具。这对于使用特定的交叉编译工具链非常重要。

image

 同理这些代码就好理解了,是判断rtconfig.py模块中PLATFORM的平台如果是iccarm,则替换env的几个环境变量值。最后导出`RTT_ROOT`(RT-Thread根目录)和`rtconfig`(配置模块)变量,以便在子SConscript脚本中使用。

 

image

获取当前目录绝对路径(即SDK_ROOT)

- 如果当前目录下有`libraries`目录,则使用`$SDK_ROOT/libraries`;否则使用上级目录下的`libraries`(这样设计可能是为了支持多级目录结构)。

- 将库路径`SDK_LIB`导出,供子脚本使用

image

 

image

 

image

 

image

 

image

 

image

 

image

 

http://www.vanclimg.com/news/2836.html

相关文章:

  • mac配置hdc+adb环境
  • C# Avalonia 07 - LoadFromCommandLine
  • 【译】当JavaScript擅自决定我的一天从早上9点开始
  • IPD项目管理软件对比市面上10款主流工具,哪个最值得入手?
  • C++小白修仙记_LeetCode刷题_1768交替合并字符串
  • MK_各社媒特点_2507
  • 抗体标记服务|FITC/Alexa Fluor偶联|流式细胞与ELISA应用
  • 昨天做什么
  • 第十九日
  • 关于我-About Me
  • 银河麒麟linux硬盘扩容
  • Tesla Financial Report Analysis All In One
  • 亚马逊与马普学会共建AI科学中心
  • 大道至简,初心为本 —— 读《大道至简》之感​
  • Kafka
  • `dev` 分支合并到 `feature` 分支
  • 2025年7月30日
  • C语言基础-分支语句(选择结构)
  • 4.5.5 流水线冒险
  • 记忆排列题目分析
  • ZhengRuiOI 题目整理
  • python deepcopy
  • 我这博客也太唐了
  • 实用指南:图论基本算法
  • python 队列的使用
  • Java核心类——4.包装类型
  • BSC链验证者添加完整流程详解:从StakeHub到Snapshot的完整链路 - 若
  • Windows操作开机启动BAT文件
  • 千万
  • 仿射变换