Scons 添加Group,SConscript已经执行,源码却没有添加进工程

发布于 2018-12-23 21:42:55
我想自己试着做一个自己的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
QQ浏览器截图20181223213649.png
QQ浏览器截图20181223213811.png

以上就是我遇到的问题,希望有大佬能帮看看,我是不是添加的过程中有哪些地方出现了问题。



查看更多

关注者
0
被浏览
2.1k
10 个回答
我夏了夏天
我夏了夏天 2018-12-24
有没有按照文档的流程来做呀,应该不会遇到这种问题呀
我夏了夏天
我夏了夏天 2018-12-24
你去 Git hub 找最新版本的模板工程试试,很快的。
另外这周会推出 BSP 制作的视频教程,后面可以参考
我夏了夏天
我夏了夏天 2018-12-24
你得路径不对,制作 BSP 是要将模板拷贝到 stm32 目录下进行修改,而不是自己创建新的文件夹。
这样相对路径就错误了
Mxf
Mxf 2018-12-24
Summer_gift 发表于 2018-12-24 11:31
你得路径不对,制作 BSP 是要将模板拷贝到 stm32 目录下进行修改,而不是自己创建新的文件夹。
这样相对路 ...


感谢你的回复!
我是希望做一个自己的bsp出来,没有使用官方的,也是希望学习一下怎么自己从零开始构建一个工程毕竟现在工作中使用的是GD的芯片不是ST的。

关于路径的话我也有打印出来,Glob('/STM32F4xx_HAL_Driver/Src/*.c')根据官方文档的介绍我填写在这里的路径应该是进到了HAL库源码的路径下了的。我在第一层级的文件夹中尝试尝试使用SConscript添加是可以添加进去的。但是如果不在第一层级的文件夹下的时候就是添加不进工程中
Mxf
Mxf 2018-12-24
Mxf 发表于 2018-12-24 15:03
感谢你的回复!
我是希望做一个自己的bsp出来,没有使用官方的,也是希望学习一下怎么自己从零开始构建一 ...


然后根据我添加的打印信息,观察到SConscript是被执行了的,定义的宏和头文件路径添加到了工程中,只有源码没被添加进去
我夏了夏天
我夏了夏天 2018-12-24
Mxf 发表于 2018-12-24 15:05
然后根据我添加的打印信息,观察到SConscript是被执行了的,定义的宏和头文件路径添加到了工程中,只有源 ...


这样啊,那你就不能是照着做了,要了解一下构建脚本的意思了
Mxf
Mxf 2018-12-24
Mxf 发表于 2018-12-24 15:05
然后根据我添加的打印信息,观察到SConscript是被执行了的,定义的宏和头文件路径添加到了工程中,只有源 ...


感谢大佬提醒,确实是添加源码的路径有问题。使用Glob('STM32F4xx_HAL_Driver/Src/*.c'')就可以了,之前写的是 '/STM32F4xx_HAL_Driver/Src/*.c' 最前面多了一个斜杠:L现在可以成功添加源码到工程里了:lol
11.png

我夏了夏天
我夏了夏天 2018-12-24
Mxf 发表于 2018-12-24 15:56
感谢大佬提醒,确实是添加源码的路径有问题。使用Glob('STM32F4xx_HAL_Driver/Src/*.c'')就可以了,之前 ...


恭喜恭喜
Kevin_EE
Kevin_EE 2019-02-20
感谢,现在终于可以在工程位置添加任意位置文件夹内代码了
1.在所需文件夹内添加SConscript
2.在BSP的SConscript中添上面SConscript的路径
sf116
sf116 2019-11-19
楼主,帮忙提供Scons添加Group、文件教程,谢谢!

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友