0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【RT-Thread学习笔记】使用scons命令生成静态库

嵌入式物联网开发 来源:嵌入式物联网开发 作者:嵌入式物联网开发 2022-07-27 09:13 次阅读

1 问题来源

本问题来源于RT-Thread技术论坛的一个常见问题,当时我回答了这个问题,很荣幸拿了一个最佳答案,为了能够再次消化并进行知识点沉淀,我把这个问题再次抛到这里。 原问题,请戳这里:scons 命令buildlib使用方法

在这里插入图片描述

2 实践分析

2.1 不懂就要问

既然不知道怎么用scons,那么我们先看到它的帮助信息,以下命令在scons的主目录执行,即可以找到Sconscript的目录下执行:

  1. rt-thread/bsp/qemu-vexpress-a9$ scons -h
  2. scons: Reading SConscript files ...
  3. drivers/SConscript
  4. applications/SConscript
  5. [, , ]
  6. scons: done reading SConscript files.
  7. usage: scons [OPTION] [TARGET] ...
  8. SCons Options:
  9. -b, -d, -e, -m, -S, -t, -w, --environment-overrides, --no-keep-going,
  10. --no-print-directory, --print-directory, --stop, --touch
  11. Ignored for compatibility.
  12. -c, --clean, --remove Remove specified targets and dependencies.
  13. -C DIR, --directory=DIR Change to DIR before doing anything.
  14. --cache-debug=FILE Print CacheDir debug info to FILE.
  15. --cache-disable, --no-cache
  16. Do not retrieve built targets from CacheDir.
  17. --cache-force, --cache-populate
  18. Copy already-built targets into the CacheDir.
  19. --cache-readonly Do not update CacheDir with built targets.
  20. --cache-show Print build actions for files from CacheDir.
  21. --config=MODE Controls Configure subsystem: auto, force,
  22. cache.
  23. -D Search up directory tree for SConstruct,
  24. build all Default() targets.
  25. --debug=TYPE Print various types of debugging information:
  26. count, duplicate, explain, findlibs, includes,
  27. memoizer, memory, objects, pdb, prepare,
  28. presub, stacktrace, time, action-timestamps.
  29. --diskcheck=TYPE Enable specific on-disk checks.
  30. --duplicate=DUPLICATE Set the preferred duplication methods. Must be
  31. one of hard-soft-copy, soft-hard-copy,
  32. hard-copy, soft-copy, copy
  33. --enable-virtualenv Import certain virtualenv variables to SCons
  34. -f FILE, --file=FILE, --makefile=FILE, --sconstruct=FILE
  35. Read FILE as the top-level SConstruct file.
  36. -h, --help Print defined help message, or this one.
  37. -H, --help-options Print this message and exit.
  38. -i, --ignore-errors Ignore errors from build actions.
  39. -I DIR, --include-dir=DIR Search DIR for imported Python modules.
  40. --ignore-virtualenv Do not import virtualenv variables to SCons
  41. --implicit-cache Cache implicit dependencies
  42. --implicit-deps-changed Ignore cached implicit dependencies.
  43. --implicit-deps-unchanged Ignore changes in implicit dependencies.
  44. --interact, --interactive Run in interactive mode.
  45. -j N, --jobs=N Allow N jobs at once.
  46. -k, --keep-going Keep going when a target can't be made.
  47. --max-drift=N Set maximum system clock drift to N seconds.
  48. --md5-chunksize=N Set chunk-size for MD5 signature computation to
  49. N kilobytes.
  50. -n, --no-exec, --just-print, --dry-run, --recon
  51. Don't build; just print commands.
  52. --no-site-dir Don't search or use the usual site_scons dir.
  53. --profile=FILE Profile SCons and put results in FILE.
  54. -q, --question Don't build; exit status says if up to date.
  55. -Q Suppress "Reading/Building" progress messages.
  56. --random Build dependencies in random order.
  57. -s, --silent, --quiet Don't print commands.
  58. --site-dir=DIR Use DIR instead of the usual site_scons dir.
  59. --stack-size=N Set the stack size of the threads used to run
  60. jobs to N kilobytes.
  61. --taskmastertrace=FILE Trace Node evaluation to FILE.
  62. --tree=OPTIONS Print a dependency tree in various formats: all,
  63. derived, prune, status, linedraw.
  64. -u, --up, --search-up Search up directory tree for SConstruct,
  65. build targets at or below current directory.
  66. -U Search up directory tree for SConstruct,
  67. build Default() targets from local SConscript.
  68. -v, --version Print the SCons version number and exit.
  69. --warn=WARNING-SPEC, --warning=WARNING-SPEC
  70. Enable or disable warnings.
  71. -Y REPOSITORY, --repository=REPOSITORY, --srcdir=REPOSITORY
  72. Search REPOSITORY for source and target files.
  73. Local Options:
  74. --dist make distribution
  75. --dist-strip make distribution and strip useless files
  76. --dist-ide make distribution for RT-Thread Studio IDE
  77. --project-path=PROJECT-PATH
  78. set dist-ide project output path
  79. --project-name=PROJECT-NAME
  80. set project name
  81. --reset-project-config reset the project configurations to default
  82. --cscope Build Cscope cross reference database. Requires
  83. cscope installed.
  84. --clang-analyzer Perform static analyze with Clang-analyzer.
  85. Requires Clang installed. It is recommended to
  86. use with scan-build like this: `scan-build
  87. scons --clang-analyzer` If things goes well,
  88. scan-build will instruct you to invoke
  89. scan-view.
  90. --buildlib=BUILDLIB building library of a component
  91. --cleanlib clean up the library by --buildlib
  92. --target=TARGET set target project: mdk/mdk4/mdk5/iar/vs/vsc/ua/
  93. cdk/ses/makefile/eclipse/codelite/cmake
  94. --stackanalysis thread stack static analysis
  95. --genconfig Generate .config from rtconfig.h
  96. --useconfig=USECONFIG make rtconfig.h from config file.
  97. --verbose print verbose information during build
  98. --menuconfig make menuconfig for RT-Thread BSP
  99. --pyconfig Python GUI menuconfig for RT-Thread BSP
  100. --pyconfig-silent Don`t show pyconfig window

精准匹配下:

  1. rt-thread/bsp/qemu-vexpress-a9$ scons -h | grep buildlib
  2. --buildlib=BUILDLIB building library of a component
  3. --cleanlib clean up the library by --buildlib

2.2 实践出整理

从上面的帮助信息,我们已经找到关键信息了,我们来实践下:

  1. rt-thread/bsp/qemu-vexpress-a9$ scons --buildlib=BUILDLIB
  2. scons: Reading SConscript files ...
  3. b''
  4. drivers/SConscript
  5. applications/SConscript
  6. [, , ]
  7. scons: done reading SConscript files.
  8. scons: Building targets ...
  9. scons: building associated VariantDir targets: build
  10. scons: `.' is up to date.
  11. scons: done building targets.

发现并没有生成,仔细一看,这个buildlib=后面跟的名称不是乱填的,是需要填写你当前目录下,已经使用scons语法配置好的组件,这个东西在scons里面是叫Group。 通俗来说,就是使用buildlib,一个Gourp就可以生成一个库。 我们再来实践下,以bsp/qemu-vexpress-a9的Application这个Group为例,在其applications目录有定义Sconsript:

在这里插入图片描述

那么就可以输入scons--buildlib=Applications

在这里插入图片描述

就可以将Applications那个group定义的C文件编译打包成一个静态库,输出也是位于bsp的目录中。

3 经验总结

  • 任何命令行指令,千万不要放过它的help信息
  • scons 使用--buildlib=xxx轻松生存库文件,库名称为libxxx.a

4 更多分享

架构师李肯

一个专注于嵌入式IoT领域的架构师。有着近10年的嵌入式一线开发经验,深耕IoT领域多年,熟知IoT领域的业务发展,深度掌握IoT领域的相关技术栈,包括但不限于主流RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、主流IoT云平台的对接、嵌入式IoT系统的架构设计等等。拥有多项IoT领域的发明专利,热衷于技术分享,有多年撰写技术博客的经验积累,连续多月获得RT-Thread官方技术社区原创技术博文优秀奖,荣获CSDN博客专家、CSDN物联网领域优质创作者、2021年度CSDN&RT-Thread技术社区之星、RT-Thread官方嵌入式开源社区认证专家、RT-Thread 2021年度论坛之星TOP4、华为云云享专家(嵌入式物联网架构设计师)等荣誉。坚信【知识改变命运,技术改变世界】!

欢迎关注我的github仓库01workstation,日常分享一些开发笔记和项目实战,欢迎指正问题。

同时也非常欢迎关注我的专栏:有问题的话,可以跟我讨论,知无不答,谢谢大家。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 静态库
    +关注

    关注

    0

    文章

    21

    浏览量

    7386
  • RT-Thread
    +关注

    关注

    31

    文章

    1149

    浏览量

    38900
  • scons
    +关注

    关注

    0

    文章

    1

    浏览量

    936
收藏 人收藏

    评论

    相关推荐

    RT-Thread学习笔记】如何优雅地退出QEMU模拟器?

    RT-Thread学习笔记】如何优雅地退出QEMU模拟器?我想重新编译源码,再次运行新的代码,怎么办呢?如何才能退出这个QEMU命令行控制台?
    的头像 发表于 07-26 04:06 4785次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】如何优雅地退出QEMU模拟器?

    RT-Thread学习笔记】ARM汇编基础的三大块知识

    RT-Thread学习笔记】ARM汇编基础的三大块知识
    的头像 发表于 07-30 10:59 1610次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】ARM汇编基础的三大块知识

    RT-Thread学习笔记】一种C语言宏定义的写法

    RT-Thread学习笔记】一种C语言宏定义的写法
    的头像 发表于 07-30 13:41 1947次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】一种C语言宏定义的写法

    RT-Thread系统中的Scons构建工具资料推荐

    文件中可以调用 Python 标准进行各类复杂的处理,而不局限于 Makefile 设定的规则。2.1 RT-ThreadScons的脚本结构SCons 使用 SConscrip
    发表于 05-07 15:35

    RT-Thread Nano入门学习笔记

    RT-Thread Nano入门学习笔记
    发表于 11-26 12:36 20次下载
    <b class='flag-5'>RT-Thread</b> Nano入门<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>

    RT-Thread 内核学习笔记 - 理解defunct僵尸线程

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记
    发表于 01-25 18:19 8次下载
    <b class='flag-5'>RT-Thread</b> 内核<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 理解defunct僵尸线程

    RT-Thread 内核学习笔记 - 设备模型rt_device的理解

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记
    发表于 01-25 18:19 8次下载
    <b class='flag-5'>RT-Thread</b> 内核<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 设备模型<b class='flag-5'>rt</b>_device的理解

    RT-Thread 内核学习笔记 - 内核对象链表结构深入理解

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记
    发表于 01-25 18:23 6次下载
    <b class='flag-5'>RT-Thread</b> 内核<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 内核对象链表结构深入理解

    RT-Thread 内核学习笔记 - 内核对象初始化链表组织方式

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记
    发表于 01-25 18:24 3次下载
    <b class='flag-5'>RT-Thread</b> 内核<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 内核对象初始化链表组织方式

    RT-Thread 内核学习笔记 - 内核对象操作API

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记
    发表于 01-25 18:26 7次下载
    <b class='flag-5'>RT-Thread</b> 内核<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 内核对象操作API

    RT-Thread学习笔记 RT-Thread的架构概述

    RT-Thread 简介 作为一名 RTOS 的初学者,也许你对 RT-Thread 还比较陌生。然而,随着你的深入接触,你会逐渐发现 RT-Thread 的魅力和它相较于其他同类型 RTOS
    的头像 发表于 07-09 11:27 4001次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b> <b class='flag-5'>RT-Thread</b>的架构概述

    RT-Thread学习笔记】Makefile的FORCE

    RT-Thread学习笔记】十分钟学会Makefile的FORCE
    的头像 发表于 07-30 13:55 1653次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】Makefile的FORCE

    RT-Thread学习笔记】如何抓取终端的网络报文

    RT-Thread学习笔记】如何抓取终端的网络报文?
    的头像 发表于 07-30 13:57 2169次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】如何抓取终端的网络报文

    RT-Thread学习笔记】用memwatch排除内存泄露

    RT-Thread学习笔记】使用memwatch排除内存泄露
    的头像 发表于 07-30 14:01 1732次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】用memwatch排除内存泄露

    基于RT-Thread Studio学习

    前期准备:从官网下载 RT-Thread Studio,弄个账号登陆,开启rt-thread学习之旅。
    的头像 发表于 05-15 11:00 2594次阅读
    基于<b class='flag-5'>RT-Thread</b> Studio<b class='flag-5'>学习</b>