我维护一个用 C++ 编写的遗留嵌入式 Linux 应用程序。该平台 SDK 采用包含交叉编译 (ARM) 工具链的 Ubuntu 18 虚拟机的形式。代码被检出到虚拟机中,以便拥有可用于编译的所有工具。
我已将工具链移至 Docker 容器(基于 Ubuntu 18),并从主机批量挂载源代码。有了这个,我可以使用 VS Code 作为编辑器,并使用 dev-containers 扩展在平台 SDK 环境中有效工作,VS Code IntelliSense 能够查看所有代码和平台/SDK 标头。
直到最近,这种方法一直运行良好,VS Code 1.86 逐步取消了对旧版本的支持(glibc < 2.28) hosts.
我尝试不在容器内运行 VS Code,而是简单地调用容器提供的编译过程。这可行,但有一个缺点,VS Code 无法再看到平台标头,因此不再提供 IntelliSense 并抱怨未知类型等。我考虑过将标头从工具链“导出”到我的 VS Code 源代码树中参考,但这似乎不是一个干净的解决方案。
进一步研究这一点,首选方法似乎是将工具链容器更新到较新的操作系统版本,以便可以使用开发容器。如果没有供应商支持(产品长期不受支持......),我必须解决任何问题,所以我还没有尝试这条路径。
我可以采用其他任何技术将旧工具链保留在 docker 中,但仍允许 VS Code IntelliSense 查看平台标头吗?
--更新--
目前我已经决定将工具链放在运行构建的容器中。为了帮助使用 IntelliSense,我只是添加了一个构建目标,它将工具链标头复制到已安装源中的指定位置,VSCode 已预先配置为进行搜索。是否意味着我需要在编辑器准备好之前运行“准备”构建设置,但其他方面工作正常。