STM32CubeIDE 终止前的无头构建延迟

问题描述

我在自动构建管道中使用 STM32CubeIDE 无头构建。构建命令本身采用以下形式:

stm32cubeidec.exe --launcher.suppressErrors -nosplash -application org.eclipse.cdt.managedbuilder.core.headlessbuild -data <folder> -import <project> -build <project>/Release

这很有效,但我注意到构建本身需要大约 15 秒,但之后命令需要 1 到 2 分钟才能退出。这很烦人,因为它使构建过程花费的时间比必要的要长得多。

我尝试直接从命令行运行命令,并在两台不同的计算机上计算运行时间。结果是类似的:

...
09:30:11 Build Finished. 0 errors,0 warnings. (took 15s.99ms)

real    2m25.843s

大约 20 秒后会打印“构建完成”消息,此时已生成输出二进制文件,但该命令仅挂起几分钟。不显示任何错误消息。

解决方法

在自动构建过程中,每个构建都在一个干净的环境中开始。在命令行上重复构建时,我发现只有在重复相同的构建时才会观察到第一个构建的延迟。此外,在“data”文件夹中生成了一个 .metadata 文件夹。在构建之前删除该文件夹会使延迟再次发生。因此,延迟似乎是由于信息被缓存到 .metadata 文件夹中所致。

事实证明,有一个选项 -no-indexer 带有模糊描述“禁用索引器”。应用此选项还可消除干净构建的延迟:

stm32cubeidec.exe --launcher.suppressErrors -nosplash -application org.eclipse.cdt.managedbuilder.core.headlessbuild -data <folder> -import <project> -build <project>/Release -no-indexer

这样做可以将我的构建管道中典型的总构建时间从 2-3 分钟减少到大约 1 分钟。