Rebuild Current BSP and Subprojects的陷阱

简介: Rebuild Current BSP and Subprojects并不像通常所理解的,会强制重新编译整个BSP以及所有子工程,实际上,它仅仅强制重新编译了BSP,而子工程是没有强制重新编译的,这里说的强制重新编译是指以"build -c"的方式重新编译所有代码。

      Rebuild Current BSP and Subprojects并不像通常所理解的,会强制重新编译整个BSP以及所有子工程,实际上,它仅仅强制重新编译了BSP,而子工程是没有强制重新编译的,这里说的强制重新编译是指以"build -c"的方式重新编译所有代码。

      一般情况下,如果仅仅修改了BSP的代码,只需要编译BSP目录即可,如果修改了子工程的代码,也只需要编译该工程。这都是提高编译速度的一些小技巧,尽量少用很费时间的Sysgen和Clean Sysgen。

      如果改变了项目的环境变量,且该环境变量影响了BSP和子工程。譬如多个型号的产品共用一个解决方案、一份BSP和子工程,在发布版本时,通过修改产品类型的环境变量,然后Rebuild Current BSP and Subprojects。本以为理所当然的事,却可能碰到奇怪的问题。修改产品类型后,Rebuild Current BSP and Subprojects,有一个子工程编译不过,而再单独编译一次该工程,又正常。

      跟踪了一下Rebuild Current BSP and Subprojects的过程,发现子工程的代码并没有重新编译(因为没有修改代码,仅仅是根据环境变量在sources文件中设置了不同的宏定义和链接所用的库),而在链接时根据产品类型的定义使用了不同的lib库,库和代码不匹配导致链接错误。

      找到问题的原因,解决起来就简单了。修改产品类型后,首先Rebuild All Subprojects,然后再Rebuild BSP。或者写一个批处理,在编译之前先手动Clean一下BSP和Subprojects,然后再Rebuild Current BSP and Subprojects。或者还可以自定义一个菜单,执行Rebuild All Subprojects和Rebuild BSP的操作,实现一键快速编译。

      最后简单说明下Rebuild Current BSP and Subprojects的流程,首先执行"Starting Build: blddemo -c -qbsp"强制重新编译BSP,然后执行"BLDDEMO: Building PostSysgen User Projects call %_PROJECTOAKROOT%\PBPostSysgenProjects.bat"。打开PBPostSysgenProjects.bat文件,内容如下:

setlocal
pushd
cd /d C:\WINCE600\platform\tws89x\filters\tcccamfilter
build
if exist build.log type build.log >> %_WINCEROOT%\build.log
if exist build.wrn type build.wrn >> %_WINCEROOT%\build.wrn
if exist build.err type build.err >> %_WINCEROOT%\build.err
cd /d C:\WINCE600\platform\tws89x\filters\tccjpgencfilter
build
if exist build.log type build.log >> %_WINCEROOT%\build.log
if exist build.wrn type build.wrn >> %_WINCEROOT%\build.wrn
if exist build.err type build.err >> %_WINCEROOT%\build.err

      Build All Subprojects和Rebuild All Subprojects则执行"Starting Build: call C:\Users\HJB\AppData\Local\Temp\PB\PBPostSysgenProjects.bat",Rebuild All Subprojects对应的PBPostSysgenProjects.bat内容如下:

setlocal
pushd
set WINCEREL=1
cd /d C:\WINCE600\platform\tws89x\filters\tcccamfilter
build -c
cd /d C:\WINCE600\platform\tws89x\filters\tccjpgencfilter
build -c

 

目录
相关文章
|
7月前
|
物联网
zigbee配置及常见错误总结---(Segment BANKED_CODE must be defined in a segment definition option)
zigbee配置及常见错误总结---(Segment BANKED_CODE must be defined in a segment definition option)
|
8月前
|
芯片
ARM hint instruction-WFI(Wait For Interrupt)指令的一些笔记
ARM hint instruction-WFI(Wait For Interrupt)指令的一些笔记
445 0
|
Rust 小程序
小程序警告:Now you can provide attr wxkey for a wxfor to improve performance
首先,无论什么程序,控制台中的警告都是会影响程序性能的。我们需要减少此类警告的出现,以提高程序的运行性能。 小程序开发的时候,遇到了如下的警告:
175 0
|
小程序
搞定 小程序 Behavior
搞定 小程序 Behavior
85 0
|
IDE 开发工具 数据库
STM32bug【 KEILMDK中出现The Project references devices, files or libraries that are not installed】
STM32bug【 KEILMDK中出现The Project references devices, files or libraries that are not installed】
297 0
subclipse同步冲突问题A conflict in the working copy obstructs the current operation
subclipse同步冲突问题A conflict in the working copy obstructs the current operation
109 0
subclipse同步冲突问题A conflict in the working copy obstructs the current operation
|
Linux C语言 C++
linux GCC编译错误:CPU you selected does not support x86-64 instruction set
Linux GCC编译时如遇到如下错误: cpp:1: error: CPU you selected does not support x86-64 instruction set 是因为在64位平台上加了-march=pentium4这样一个编译参数,它只用于32位平台。
1928 0
|
Linux C语言
gcc编译出现 undefined reference to ‘pthread_create‘ 的解决方法
gcc编译出现 undefined reference to ‘pthread_create‘ 的解决方法
365 0
gcc编译出现 undefined reference to ‘pthread_create‘ 的解决方法
SAP QM初阶执行事务代码QDB1,报错- Sampling procedure NM000001 has no sampling scheme-
SAP QM初阶执行事务代码QDB1,报错- Sampling procedure NM000001 has no sampling scheme-
SAP QM初阶执行事务代码QDB1,报错- Sampling procedure NM000001 has no sampling scheme-
|
Kubernetes 调度 Windows
K8s 1.14 发布了,Release Note 该怎么读?
在本篇文章中,我们将 1.14 的Release Note 按照主题进行了重新归纳和梳理,按照类别对重要变更进行了技术剖析和讨论。希望这种“分类解读”的方式,能够帮助大家更好的理解 1.14 这个发布的核心内容。
1266 0