0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【RT-Thread學(xué)習(xí)筆記】使用scons命令生成靜態(tài)庫(kù)

嵌入式物聯(lián)網(wǎng)開(kāi)發(fā) ? 來(lái)源:嵌入式物聯(lián)網(wǎng)開(kāi)發(fā) ? 作者:嵌入式物聯(lián)網(wǎng)開(kāi)發(fā) ? 2022-07-27 09:13 ? 次閱讀

1 問(wèn)題來(lái)源

本問(wèn)題來(lái)源于RT-Thread技術(shù)論壇的一個(gè)常見(jiàn)問(wèn)題,當(dāng)時(shí)我回答了這個(gè)問(wèn)題,很榮幸拿了一個(gè)最佳答案,為了能夠再次消化并進(jìn)行知識(shí)點(diǎn)沉淀,我把這個(gè)問(wèn)題再次拋到這里。 原問(wèn)題,請(qǐng)戳這里:scons 命令buildlib使用方法

在這里插入圖片描述

2 實(shí)踐分析

2.1 不懂就要問(wèn)

既然不知道怎么用scons,那么我們先看到它的幫助信息,以下命令在scons的主目錄執(zhí)行,即可以找到Sconscript的目錄下執(zhí)行:

  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

精準(zhǔn)匹配下:

  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 實(shí)踐出整理

從上面的幫助信息,我們已經(jīng)找到關(guān)鍵信息了,我們來(lái)實(shí)踐下:

  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.

發(fā)現(xiàn)并沒(méi)有生成,仔細(xì)一看,這個(gè)buildlib=后面跟的名稱不是亂填的,是需要填寫(xiě)你當(dāng)前目錄下,已經(jīng)使用scons語(yǔ)法配置好的組件,這個(gè)東西在scons里面是叫Group。 通俗來(lái)說(shuō),就是使用buildlib,一個(gè)Gourp就可以生成一個(gè)庫(kù)。 我們?cè)賮?lái)實(shí)踐下,以bsp/qemu-vexpress-a9的Application這個(gè)Group為例,在其applications目錄有定義Sconsript:

在這里插入圖片描述

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

在這里插入圖片描述

就可以將Applications那個(gè)group定義的C文件編譯打包成一個(gè)靜態(tài)庫(kù),輸出也是位于bsp的目錄中。

3 經(jīng)驗(yàn)總結(jié)

  • 任何命令行指令,千萬(wàn)不要放過(guò)它的help信息
  • scons 使用--buildlib=xxx輕松生存庫(kù)文件,庫(kù)名稱為libxxx.a

4 更多分享

架構(gòu)師李肯

一個(gè)專注于嵌入式IoT領(lǐng)域的架構(gòu)師。有著近10年的嵌入式一線開(kāi)發(fā)經(jīng)驗(yàn),深耕IoT領(lǐng)域多年,熟知IoT領(lǐng)域的業(yè)務(wù)發(fā)展,深度掌握IoT領(lǐng)域的相關(guān)技術(shù)棧,包括但不限于主流RTOS內(nèi)核的實(shí)現(xiàn)及其移植、硬件驅(qū)動(dòng)移植開(kāi)發(fā)、網(wǎng)絡(luò)通訊協(xié)議開(kāi)發(fā)、編譯構(gòu)建原理及其實(shí)現(xiàn)、底層匯編及編譯原理、編譯優(yōu)化及代碼重構(gòu)、主流IoT云平臺(tái)的對(duì)接、嵌入式IoT系統(tǒng)的架構(gòu)設(shè)計(jì)等等。擁有多項(xiàng)IoT領(lǐng)域的發(fā)明專利,熱衷于技術(shù)分享,有多年撰寫(xiě)技術(shù)博客的經(jīng)驗(yàn)積累,連續(xù)多月獲得RT-Thread官方技術(shù)社區(qū)原創(chuàng)技術(shù)博文優(yōu)秀獎(jiǎng),榮獲CSDN博客專家、CSDN物聯(lián)網(wǎng)領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、2021年度CSDN&RT-Thread技術(shù)社區(qū)之星、RT-Thread官方嵌入式開(kāi)源社區(qū)認(rèn)證專家、RT-Thread 2021年度論壇之星TOP4、華為云云享專家(嵌入式物聯(lián)網(wǎng)架構(gòu)設(shè)計(jì)師)等榮譽(yù)。堅(jiān)信【知識(shí)改變命運(yùn),技術(shù)改變世界】!

歡迎關(guān)注我的github倉(cāng)庫(kù)01workstation,日常分享一些開(kāi)發(fā)筆記和項(xiàng)目實(shí)戰(zhàn),歡迎指正問(wèn)題。

同時(shí)也非常歡迎關(guān)注我的專欄:有問(wèn)題的話,可以跟我討論,知無(wú)不答,謝謝大家。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 靜態(tài)庫(kù)
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    7439
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1289

    瀏覽量

    40135
  • scons
    +關(guān)注

    關(guān)注

    0

    文章

    1

    瀏覽量

    955
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RT-Thread系統(tǒng)中的Scons構(gòu)建工具資料推薦

    文件中可以調(diào)用 Python 標(biāo)準(zhǔn)庫(kù)進(jìn)行各類復(fù)雜的處理,而不局限于 Makefile 設(shè)定的規(guī)則。2.1 RT-ThreadScons的腳本結(jié)構(gòu)SCons 使用 SConscrip
    發(fā)表于 05-07 15:35

    RT-Thread Nano入門學(xué)習(xí)筆記

    RT-Thread Nano入門學(xué)習(xí)筆記
    發(fā)表于 11-26 12:36 ?20次下載
    <b class='flag-5'>RT-Thread</b> Nano入門<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>

    RT-Thread 應(yīng)用筆記 - RTC Alarm 組件的使用

    RT-Thread 應(yīng)用筆記 - 不正確使用LOG也會(huì)引發(fā)hard faultRT-Thread 應(yīng)用筆記 - RTC Alarm 組件的使用RT-
    發(fā)表于 01-25 18:18 ?10次下載
    <b class='flag-5'>RT-Thread</b> 應(yīng)用<b class='flag-5'>筆記</b> - RTC Alarm 組件的使用

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 理解defunct僵尸線程

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記
    發(fā)表于 01-25 18:19 ?8次下載
    <b class='flag-5'>RT-Thread</b> 內(nèi)核<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 理解defunct僵尸線程

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 設(shè)備模型rt_device的理解

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記
    發(fā)表于 01-25 18:19 ?8次下載
    <b class='flag-5'>RT-Thread</b> 內(nèi)核<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 設(shè)備模型<b class='flag-5'>rt</b>_device的理解

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象鏈表結(jié)構(gòu)深入理解

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記
    發(fā)表于 01-25 18:23 ?6次下載
    <b class='flag-5'>RT-Thread</b> 內(nèi)核<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 內(nèi)核對(duì)象鏈表結(jié)構(gòu)深入理解

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象初始化鏈表組織方式

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記
    發(fā)表于 01-25 18:24 ?3次下載
    <b class='flag-5'>RT-Thread</b> 內(nèi)核<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 內(nèi)核對(duì)象初始化鏈表組織方式

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象操作API

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記
    發(fā)表于 01-25 18:26 ?7次下載
    <b class='flag-5'>RT-Thread</b> 內(nèi)核<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 內(nèi)核對(duì)象操作API

    RT-Thread 4.1.0的CMake構(gòu)建教程

    CMake 支持 在 RT-Thread 4.1.0 正式發(fā)布版中,添加了對(duì) CMake 的支持。開(kāi)發(fā)者可以使用 SCons 工具來(lái)生成 CMakeLists.txt 文件。 為何要支持 CMake
    的頭像 發(fā)表于 05-25 11:06 ?3360次閱讀

    RT-Thread全球技術(shù)大會(huì):關(guān)于SCons構(gòu)建引擎的主要部分介紹

    RT-Thread全球技術(shù)大會(huì):關(guān)于SCons構(gòu)建引擎的主要部分介紹 ? ? ? ? 審核編輯:彭靜 ?
    的頭像 發(fā)表于 05-27 14:55 ?998次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會(huì):關(guān)于<b class='flag-5'>SCons</b>構(gòu)建引擎的主要部分介紹

    RT-Thread學(xué)習(xí)筆記 RT-Thread的架構(gòu)概述

    RT-Thread 簡(jiǎn)介 作為一名 RTOS 的初學(xué)者,也許你對(duì) RT-Thread 還比較陌生。然而,隨著你的深入接觸,你會(huì)逐漸發(fā)現(xiàn) RT-Thread 的魅力和它相較于其他同類型 RTOS
    的頭像 發(fā)表于 07-09 11:27 ?4556次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> <b class='flag-5'>RT-Thread</b>的架構(gòu)概述

    RT-Thread學(xué)習(xí)筆記】Makefile的FORCE

    RT-Thread學(xué)習(xí)筆記】十分鐘學(xué)會(huì)Makefile的FORCE
    的頭像 發(fā)表于 07-30 13:55 ?2572次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>】Makefile的FORCE

    RT-Thread學(xué)習(xí)筆記】如何抓取終端的網(wǎng)絡(luò)報(bào)文

    RT-Thread學(xué)習(xí)筆記】如何抓取終端的網(wǎng)絡(luò)報(bào)文?
    的頭像 發(fā)表于 07-30 13:57 ?2824次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>】如何抓取終端的網(wǎng)絡(luò)報(bào)文

    RT-Thread學(xué)習(xí)筆記】用memwatch排除內(nèi)存泄露

    RT-Thread學(xué)習(xí)筆記】使用memwatch排除內(nèi)存泄露
    的頭像 發(fā)表于 07-30 14:01 ?2341次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>】用memwatch排除內(nèi)存泄露

    基于RT-Thread Studio學(xué)習(xí)

    前期準(zhǔn)備:從官網(wǎng)下載 RT-Thread Studio,弄個(gè)賬號(hào)登陸,開(kāi)啟rt-thread學(xué)習(xí)之旅。
    的頭像 發(fā)表于 05-15 11:00 ?3967次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio<b class='flag-5'>學(xué)習(xí)</b>