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

发表在 SCons2018-12-23 21:42 [复制链接] 10 1569

我想自己试着做一个自己的stm32_hal_bsp,然而在scons中添加HAL库源码的时候出现的问题。
( a( |, L, e8 q- N$ ~问题描述:使用scons --target=mdk5生成工程,已经确定添加HAL源码的SConscript脚本执行了,工程中也出现了脚本中定义的宏USE_HAL_DRIVER,同时头文件也正确的添加到工程中了,但是源码却没有被添加进来。
4 e, ]/ ?) I4 W5 C+ S/ k, a+ h2 B" b3 J7 m: F. T" |' D

) F# E, ^! \; M. ]' c我的hal库的源码路径是参考的bsp中的stm32新框架的。- |4 Z: `! E) V7 r6 O9 ], J$ A
HAL源码位于  /工程顶层目录/board/CubeMX_Config/Drivers/STM32F4xx_HAL_Driver/Src  下
; Y$ e; c7 E0 M3 FHAL头文件位于   /工程顶层目录/board/CubeMX_Config/Drivers/STM32F4xx_HAL_Driver/Inc  下
2 p8 {- g1 x0 ]+ N1 u1 p9 D) Z. l头文件与源文件都是CubeMX来生成的工程带的
5 v) r1 G$ E6 Q  ], _8 v而我改的SConscript位于  /工程顶层目录/board/CubeMX_Config/Drivers  这个文件夹下,内容如下所示
; K1 e* M! d) Y' ?8 A
  1. Import('RTT_ROOT')/ O7 J( q4 t" Q) M2 j$ o2 E+ T/ [
  2. Import('rtconfig')
    ; Y/ x2 Q8 f+ f# c
  3. from building import *
    ! f8 e0 g! t8 e* L; X7 e7 d8 a

  4. % V( u! Y9 n6 R$ b* b3 n9 _
  5. cwd = GetCurrentDir()
    6 r% ~5 G+ P$ E9 L

  6. ! a' x3 I) J6 F" p. k5 W/ a
  7. src = Glob('/STM32F4xx_HAL_Driver/Src/*.c')3 O2 L* `: Z$ `9 \' n) h
  8. include_path = [cwd+'/STM32F4xx_HAL_Driver/Inc']
    ! H4 T% e4 J6 e* q+ |3 {4 t8 g
  9. . N& e5 g6 o6 H  ], F/ s
  10. - w+ U  T* x% z
  11. CPPDEFINES = ['USE_HAL_DRIVER']
    1 s6 w* W+ s/ E& f! F, c

  12. . L, v% E+ M, V6 R# b
  13. group = DefineGroup('hal_lib', src, depend = [''], CPPPATH = include_path,CPPDEFINES = CPPDEFINES)
    5 g9 \- W1 F$ m% D( g; M* _. e

  14. * O$ ]5 O' `7 E) d- ?- {
  15. print('add hal library')% ^9 c0 g% _1 u& z( b2 i7 k' L
  16. Return('group')
复制代码
就是将Src文件夹下的所有源文件添加到工程中,定义了宏 USE_HAL_DRIVER 和 添加了Inc文件夹的路径。在添加完源码最后打印了一下'add hal library',这句话在进行scons --target=mdk5时是可以看到打印出来了的。截图放最后。
" m: y; m3 `* N/ K+ H, O% b% Q$ T) ^" |; \1 U

  T) c: B7 b8 n. S+ U2 m然后将顶层SConscript脚本做了如下修改/ o) m$ i! ?8 W% u
  1. # for module compiling
    7 {  T" a- D7 B! y
  2. import os. }! i2 a6 @, }
  3. Import('RTT_ROOT')1 u/ t% d8 J; Y% j. e/ l
  4. 9 D& j. u! h& ^/ @
  5. cwd = str(Dir('#'))" g1 T# {! J% _+ I( O+ ^, ~
  6. objs = []
    7 p% a0 A" d- I  N* ~
  7. list = os.listdir(cwd)/ k+ q4 z& F/ ~# S& Y3 O; p- F7 k( R

  8. ) S6 F% c9 v- T& c( v; d6 N
  9. for d in list:* G5 f3 Z" o( P9 |; b
  10.     path = os.path.join(cwd, d)  C& H6 ~9 R2 q$ V9 V
  11.     if os.path.isfile(os.path.join(path, 'SConscript')):2 p1 M+ N7 Y$ d
  12.         objs = objs + SConscript(os.path.join(d, 'SConscript'))
    0 |9 e4 N% P- Q

  13. / c, B" ?/ |* k' f
  14. print(os.path.join('C:/RT-Thread/RTT_Learn/STM32F429_CUBE_RTT_ENV/board/CubeMX_Config/Drivers','SConscript'))& C1 t+ D) Q8 o% [- K
  15. objs = objs + SConscript(os.path.join('C:/RT-Thread/RTT_Learn/STM32F429_CUBE_RTT_ENV/board/CubeMX_Config/Drivers','SConscript'))# s6 @' K7 F; J; N+ A6 _! ?

  16. ( U# x* [- C0 T1 I$ |' S
  17. Return('objs')
复制代码
因为bsp下的顶层目录下的SConscript都是只扫描工程目录下的文件夹中是否存在其他SConscript,Drivers文件夹下的SConscript是找不到来执行的,所以单独添加了Drivers目录下的SConscript
' [2 _9 A8 e) U5 d# |4 E7 G3 Z  |% }/ t; i) o! V
9 Q+ ?  J0 @, l9 [" k" K) S
顶层目录下的SConstruct复制于stm32 bsp下的正点原子阿波罗开发板,去掉了它的添加hal库和驱动的代码,因为它需要库放到工程目录的上一个目录下,我不想这么干,代码如下所示
% d: d, @: [1 K1 d/ w1 S
  1. import os
    1 R1 c) p  _) N: l
  2. import sys
    / v" U5 P' g* e/ I* R' f+ R
  3. import rtconfig
    ; t4 x+ a  u0 ?0 C
  4. 9 H$ n3 O; I( _: L7 K: a
  5. if os.getenv('RTT_ROOT'):0 N0 X1 S' o0 R* a  O
  6.     RTT_ROOT = os.getenv('RTT_ROOT')
    8 u2 N- Q8 Y: H4 ], d
  7. else:+ o( `* p- r1 ^6 ^* P
  8.     RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..')
    + B$ r4 I' m/ N' z
  9. % o1 n3 d( s5 G
  10. sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
    7 Z. |1 b, ^$ [! M3 p
  11. try:- z/ Q8 p' A4 i1 u. I
  12.     from building import *
    ! \! K, Q  Y* z/ \& W8 C6 T
  13. except:9 g- O4 h, T. t4 O1 }
  14.     print('Cannot found RT-Thread root directory, please check RTT_ROOT')8 a* ]/ ?+ _# t& f
  15.     print(RTT_ROOT)+ ]0 }0 H. r) {& |" Y# \1 K1 P
  16.     exit(-1)9 H) ~. W) U. {/ V1 t2 W3 W& b

  17. 9 j8 w! i1 u; c
  18. TARGET = 'rt-thread.' + rtconfig.TARGET_EXT
    4 n; q% @8 p( m, ^# r

  19. 3 g' g; V" t2 q# l
  20. env = Environment(tools = ['mingw'],) U' |1 h* z. R; J/ c/ d0 p$ W8 z
  21.     AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
    " F0 t$ F: h6 O' `- t) m
  22.     CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS,
    2 W% [9 x. U: |7 i. L
  23.     AR = rtconfig.AR, ARFLAGS = '-rc',
    4 S2 Q7 x: N* |$ F
  24.     LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
    : v3 U) p, l  e* N
  25. env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
    5 P$ ~$ c8 z/ B
  26. . c! l/ C- P7 f3 k) v3 ~
  27. if rtconfig.PLATFORM == 'iar':. T9 d5 K* @3 _8 G" u! U3 Q- e
  28.     env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES'])
    9 Z$ Q, K6 X* n$ [$ M  A2 x0 a. _
  29.     env.Replace(ARFLAGS = [''])
    ; p) a; z" J( Q2 _
  30.     env.Replace(LINKCOM = ['$LINK $SOURCES $LINKFLAGS -o $TARGET --map rt-thread.map'])( U7 i5 z7 a% F9 w

  31. " q- F6 B% K) T! t
  32. Export('RTT_ROOT')
    9 n& O  @4 R1 D' K0 M
  33. Export('rtconfig')
    5 X  }- L; b7 O: }# [

  34. . O% ?/ E7 o( |! n# b0 x! \# Z
  35. & d' K$ z7 U; e$ G, v: t3 B  |1 z+ H
  36. # prepare building environment+ [4 H* x( i4 [8 y* X" c' l
  37. objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False), c- y: ?- o% ^7 ^* J
  38. - j+ H7 \4 G0 a8 Q, ]4 [
  39. # include libraries
    ' T8 H4 q% c( O7 x
  40. #hal_libraries_path = os.path.abspath('./') + '/board/CubeMX_Config/Drivers/'
    8 F9 @" p9 y- H5 v
  41. # objs.extend(SConscript(os.path.join(hal_libraries_path, 'SConscript')))3 ^# O: k  f* P
  42. #SConscript(os.path.join(hal_libraries_path, 'SConscript'))
    & q7 v6 F  b5 n8 M% M
  43. ; Y6 `; n2 w$ X9 h' }1 ?- [
  44. # include drivers
    6 a8 D9 F6 E* k* F$ \1 Y* D! p5 `# c
  45. # objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript')))
    - [$ O* b* Z0 f9 C( V" R
  46. / c$ T1 c: ~9 K6 f1 }; t
  47. # make a building
    + h) j& `& t& d
  48. DoBuilding(TARGET, objs)
    * |: Q9 m7 `3 ~! s6 J) `" X& Y% u8 T$ C
复制代码
最后然后在ENV中使用scons --target=mdk5来创建工程,在ENV打印出来的信息中,打印出了add hal library说明这个脚本文件应该是执行完了的,而且添加的源码有没有宏的依赖但是工程中却没有看到有hal_lib分组的生成,但是定义使用HAL库的宏被添加了,头文件路径也被添加了。
, e/ h/ S" ]1 |- v/ ~ QQ浏览器截图20181223214058.png ( w$ W7 D, B5 a$ D# z4 [
QQ浏览器截图20181223213649.png ! L* j* D$ }) {7 j, w0 {
QQ浏览器截图20181223213811.png # ~7 ?6 [2 U/ g  u
. r8 a4 r6 G1 b) @9 [
以上就是我遇到的问题,希望有大佬能帮看看,我是不是添加的过程中有哪些地方出现了问题。& {, Y/ {" m6 O% b, @

3 X/ s, D- ]7 \
5 u( u- a0 m$ p5 G" a( A- D! y* q# @* |5 r  Y! n
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2018-12-24 11:29:25 | 显示全部楼层
有没有按照文档的流程来做呀,应该不会遇到这种问题呀
使用道具 举报 回复
发表于 2018-12-24 11:30:29 | 显示全部楼层
你去 Git hub 找最新版本的模板工程试试,很快的。
# Y* L. _4 e0 P* t7 L0 e另外这周会推出 BSP 制作的视频教程,后面可以参考
使用道具 举报 回复
发表于 2018-12-24 11:31:53 | 显示全部楼层
你得路径不对,制作 BSP 是要将模板拷贝到 stm32 目录下进行修改,而不是自己创建新的文件夹。
0 ~* F* I1 d' I) s这样相对路径就错误了
使用道具 举报 回复
发表于 2018-12-24 15:03:11 | 显示全部楼层
Summer_gift 发表于 2018-12-24 11:31
3 g) X+ f1 k% d: T0 |8 i你得路径不对,制作 BSP 是要将模板拷贝到 stm32 目录下进行修改,而不是自己创建新的文件夹。
; x: Y+ c; v* N( M这样相对路 ...

' R3 `6 w' o9 _感谢你的回复!
5 \* n( h: ]  p( N# t& L我是希望做一个自己的bsp出来,没有使用官方的,也是希望学习一下怎么自己从零开始构建一个工程毕竟现在工作中使用的是GD的芯片不是ST的。
. O  {/ h3 Y3 Y  [" y' ^8 _; h) z2 |6 T! ]9 r
关于路径的话我也有打印出来,Glob('/STM32F4xx_HAL_Driver/Src/*.c')根据官方文档的介绍我填写在这里的路径应该是进到了HAL库源码的路径下了的。我在第一层级的文件夹中尝试尝试使用SConscript添加是可以添加进去的。但是如果不在第一层级的文件夹下的时候就是添加不进工程中
使用道具 举报 回复
发表于 2018-12-24 15:05:05 | 显示全部楼层
Mxf 发表于 2018-12-24 15:035 L) r7 o' N8 O; |/ ]7 x5 d
感谢你的回复!
3 q( @! ]& O$ c) m. M& E我是希望做一个自己的bsp出来,没有使用官方的,也是希望学习一下怎么自己从零开始构建一 ...

- e7 E: ^/ h9 L7 N5 W9 B9 O# {然后根据我添加的打印信息,观察到SConscript是被执行了的,定义的宏和头文件路径添加到了工程中,只有源码没被添加进去
使用道具 举报 回复
发表于 2018-12-24 15:35:14 | 显示全部楼层
Mxf 发表于 2018-12-24 15:05& C) {' G( X2 Z, T# o3 l  U8 @% X
然后根据我添加的打印信息,观察到SConscript是被执行了的,定义的宏和头文件路径添加到了工程中,只有源 ...
9 j" E/ [, c5 v7 N3 K+ @5 G  _7 s
这样啊,那你就不能是照着做了,要了解一下构建脚本的意思了
使用道具 举报 回复
发表于 2018-12-24 15:56:30 | 显示全部楼层
Mxf 发表于 2018-12-24 15:058 k) B9 l" d/ o+ \5 F; d, {( a
然后根据我添加的打印信息,观察到SConscript是被执行了的,定义的宏和头文件路径添加到了工程中,只有源 ...
1 q5 U' |0 U0 o: v
感谢大佬提醒,确实是添加源码的路径有问题。使用Glob('STM32F4xx_HAL_Driver/Src/*.c'')就可以了,之前写的是  '/STM32F4xx_HAL_Driver/Src/*.c' 最前面多了一个斜杠现在可以成功添加源码到工程里了
. T: X, P$ r. ^$ ^ 11.png 6 c0 g0 F7 y7 ?0 X! f

9 L& H/ r9 M2 D4 j3 n5 z. m
使用道具 举报 回复
发表于 2018-12-24 16:48:18 | 显示全部楼层
Mxf 发表于 2018-12-24 15:564 h/ L7 `. r' X, ^/ [1 ]5 Y  D
感谢大佬提醒,确实是添加源码的路径有问题。使用Glob('STM32F4xx_HAL_Driver/Src/*.c'')就可以了,之前 ...
3 `7 c6 K7 E4 ?% p# h! Q4 ~3 ?
恭喜恭喜
使用道具 举报 回复
发表于 2019-2-20 15:17:09 | 显示全部楼层
感谢,现在终于可以在工程位置添加任意位置文件夹内代码了4 c- k& E. J" a2 C9 Q& m! ^/ p
1.在所需文件夹内添加SConscript1 d  _! O3 N* f9 s" I
2.在BSP的SConscript中添上面SConscript的路径
使用道具 举报 回复
发表于 2019-11-19 15:30:24 | 显示全部楼层
楼主,帮忙提供Scons添加Group、文件教程,谢谢!
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表