Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
SCons
Scons 添加Group,SConscript已经执行,源码却没有添加进工程
发布于 2018-12-23 21:42:55 浏览:4761
订阅该版
[tocm] 我想自己试着做一个自己的stm32_hal_bsp,然而在scons中添加HAL库源码的时候出现的问题。 问题描述:使用scons --target=mdk5生成工程,已经确定添加HAL源码的SConscript脚本执行了,工程中也出现了脚本中定义的宏USE_HAL_DRIVER,同时头文件也正确的添加到工程中了,但是源码却没有被添加进来。 我的hal库的源码路径是参考的bsp中的stm32新框架的。 HAL源码位于 /工程顶层目录/board/CubeMX_Config/Drivers/STM32F4xx_HAL_Driver/Src 下 HAL头文件位于 /工程顶层目录/board/CubeMX_Config/Drivers/STM32F4xx_HAL_Driver/Inc 下 头文件与源文件都是CubeMX来生成的工程带的 而我改的SConscript位于 /工程顶层目录/board/CubeMX_Config/Drivers 这个文件夹下,内容如下所示 ```Import('RTT_ROOT') Import('rtconfig') from building import * cwd = GetCurrentDir() src = Glob('/STM32F4xx_HAL_Driver/Src/*.c') include_path = [cwd+'/STM32F4xx_HAL_Driver/Inc'] CPPDEFINES = ['USE_HAL_DRIVER'] group = DefineGroup('hal_lib', src, depend = [''], CPPPATH = include_path,CPPDEFINES = CPPDEFINES) print('add hal library') Return('group')```就是将Src文件夹下的所有源文件添加到工程中,定义了宏 USE_HAL_DRIVER 和 添加了Inc文件夹的路径。在添加完源码最后打印了一下'add hal library',这句话在进行scons --target=mdk5时是可以看到打印出来了的。截图放最后。 然后将顶层SConscript脚本做了如下修改 ```# for module compiling import os Import('RTT_ROOT') cwd = str(Dir('#')) objs = [] list = os.listdir(cwd) for d in list: path = os.path.join(cwd, d) if os.path.isfile(os.path.join(path, 'SConscript')): objs = objs + SConscript(os.path.join(d, 'SConscript')) print(os.path.join('C:/RT-Thread/RTT_Learn/STM32F429_CUBE_RTT_ENV/board/CubeMX_Config/Drivers','SConscript')) objs = objs + SConscript(os.path.join('C:/RT-Thread/RTT_Learn/STM32F429_CUBE_RTT_ENV/board/CubeMX_Config/Drivers','SConscript')) Return('objs')```因为bsp下的顶层目录下的SConscript都是只扫描工程目录下的文件夹中是否存在其他SConscript,Drivers文件夹下的SConscript是找不到来执行的,所以单独添加了Drivers目录下的SConscript。 顶层目录下的SConstruct复制于stm32 bsp下的正点原子阿波罗开发板,去掉了它的添加hal库和驱动的代码,因为它需要库放到工程目录的上一个目录下,我不想这么干,代码如下所示 ```import os import sys import rtconfig if os.getenv('RTT_ROOT'): RTT_ROOT = os.getenv('RTT_ROOT') else: RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] try: from building import * except: print('Cannot found RT-Thread root directory, please check RTT_ROOT') print(RTT_ROOT) exit(-1) TARGET = 'rt-thread.' + rtconfig.TARGET_EXT env = Environment(tools = ['mingw'], AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, AR = rtconfig.AR, ARFLAGS = '-rc', LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) env.PrependENVPath('PATH', rtconfig.EXEC_PATH) if rtconfig.PLATFORM == 'iar': env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) env.Replace(ARFLAGS = ['']) env.Replace(LINKCOM = ['$LINK $SOURCES $LINKFLAGS -o $TARGET --map rt-thread.map']) Export('RTT_ROOT') Export('rtconfig') # prepare building environment objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) # include libraries #hal_libraries_path = os.path.abspath('./') + '/board/CubeMX_Config/Drivers/' # objs.extend(SConscript(os.path.join(hal_libraries_path, 'SConscript'))) #SConscript(os.path.join(hal_libraries_path, 'SConscript')) # include drivers # objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'))) # make a building DoBuilding(TARGET, objs) ```最后然后在ENV中使用scons --target=mdk5来创建工程,在ENV打印出来的信息中,打印出了add hal library说明这个脚本文件应该是执行完了的,而且添加的源码有没有宏的依赖但是工程中却没有看到有hal_lib分组的生成,但是定义使用HAL库的宏被添加了,头文件路径也被添加了。 ![QQ浏览器截图20181223214058.png](/uploads/201812/23/214111dpftzmiegwpbzmww.png) ![QQ浏览器截图20181223213649.png](/uploads/201812/23/213845pzbt9twpzrbb56rt.png) ![QQ浏览器截图20181223213811.png](/uploads/201812/23/213908t8obiu8ls4y5cgo4.png) 以上就是我遇到的问题,希望有大佬能帮看看,我是不是添加的过程中有哪些地方出现了问题。
查看更多
10
个回答
默认排序
按发布时间排序
我夏了夏天
认证专家
2018-12-24
Life isn't about finding yourself, life is about creating yourself.
有没有按照文档的流程来做呀,应该不会遇到这种问题呀
我夏了夏天
认证专家
2018-12-24
Life isn't about finding yourself, life is about creating yourself.
你去 Git hub 找最新版本的模板工程试试,很快的。 另外这周会推出 BSP 制作的视频教程,后面可以参考
我夏了夏天
认证专家
2018-12-24
Life isn't about finding yourself, life is about creating yourself.
你得路径不对,制作 BSP 是要将模板拷贝到 stm32 目录下进行修改,而不是自己创建新的文件夹。 这样相对路径就错误了
Mxf
2018-12-24
这家伙很懒,什么也没写!
>你得路径不对,制作 BSP 是要将模板拷贝到 stm32 目录下进行修改,而不是自己创建新的文件夹。 >这样相对路 ... --- 感谢你的回复! 我是希望做一个自己的bsp出来,没有使用官方的,也是希望学习一下怎么自己从零开始构建一个工程毕竟现在工作中使用的是GD的芯片不是ST的。 关于路径的话我也有打印出来,Glob('/STM32F4xx_HAL_Driver/Src/*.c')根据官方文档的介绍我填写在这里的路径应该是进到了HAL库源码的路径下了的。我在第一层级的文件夹中尝试尝试使用SConscript添加是可以添加进去的。但是如果不在第一层级的文件夹下的时候就是添加不进工程中
Mxf
2018-12-24
这家伙很懒,什么也没写!
>感谢你的回复! >我是希望做一个自己的bsp出来,没有使用官方的,也是希望学习一下怎么自己从零开始构建一 ... --- 然后根据我添加的打印信息,观察到SConscript是被执行了的,定义的宏和头文件路径添加到了工程中,只有源码没被添加进去
我夏了夏天
认证专家
2018-12-24
Life isn't about finding yourself, life is about creating yourself.
>然后根据我添加的打印信息,观察到SConscript是被执行了的,定义的宏和头文件路径添加到了工程中,只有源 ... --- 这样啊,那你就不能是照着做了,要了解一下构建脚本的意思了
Mxf
2018-12-24
这家伙很懒,什么也没写!
>然后根据我添加的打印信息,观察到SConscript是被执行了的,定义的宏和头文件路径添加到了工程中,只有源 ... --- 感谢大佬提醒,确实是添加源码的路径有问题。使用Glob('STM32F4xx_HAL_Driver/Src/*.c'')就可以了,之前写的是 '/STM32F4xx_HAL_Driver/Src/*.c' 最前面多了一个斜杠:L现在可以成功添加源码到工程里了:lol [attach]7060[/attach]
我夏了夏天
认证专家
2018-12-24
Life isn't about finding yourself, life is about creating yourself.
>感谢大佬提醒,确实是添加源码的路径有问题。使用Glob('STM32F4xx_HAL_Driver/Src/*.c'')就可以了,之前 ... --- 恭喜恭喜
Kevin_EE
2019-02-20
这家伙很懒,什么也没写!
感谢,现在终于可以在工程位置添加任意位置文件夹内代码了 1.在所需文件夹内添加SConscript 2.在BSP的SConscript中添上面SConscript的路径
sf116
2019-11-19
这家伙很懒,什么也没写!
楼主,帮忙提供Scons添加Group、文件教程,谢谢!
撰写答案
登录
注册新账号
关注者
0
被浏览
4.8k
关于作者
Mxf
这家伙很懒,什么也没写!
提问
6
回答
32
被采纳
0
关注TA
发私信
相关问题
1
scons不支持python3吗?
2
编译又出现问题
3
BSP目录下做好一个项目后,怎么把发给别人的包裁剪的小...
4
为什么重新scons --target=mdk 后,以前在MDK工程里保存的C文
5
scons如何指定输出目录?
6
新人求助。
7
想用env 工具自己构建编译环境想用vscode 进行一些简单程序
8
关于scons脚本问题
9
使用scons --target=makefile的问题
10
scons 工作机制
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
TinyUSB Demo运行教程
2
RT-Thread学习大礼包一键带走!
3
freemodbus从机调试说明
4
【1024】瑞萨 RA 系列 BSP 制作与适配最新版本的 Keil 、 RSC、固件,较新的 FSP
5
基于 RT-Thread 星火一号开发板的俄罗斯方块
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
ART-Pi
FinSH
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
cubemx
PWM
flash
packages_软件包
freemodbus
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
出出啊
1516
个答案
342
次被采纳
小小李sunny
1440
个答案
289
次被采纳
张世争
799
个答案
171
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
4
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部