【问题标题】:vim Syntastic not finding header files when developing with mbedvim Syntastic 使用 mbed 开发时找不到头文件
【发布时间】:2026-01-28 15:00:01
【问题描述】:

我正在使用 ARM 的 mbed OS 开发原型。我对 C++ 很陌生,所以有合成工作将是理想的,但它会挂在“mbed.h”的导入上。

项目的结构是:

  • /
  • myfile.cpp
  • mbed 操作系统/
    • mbed.h

Syntastic 说的是fatal error: 'mbed.h' file not found

我怎样才能让 Syntastic / GCC(或任何它使用的)来查找头文件?

更新:

看起来包含一个带有以下内容的 .syntastic_cpp_config 文件有帮助(但涉及添加一行、运行 Syntastic、查找下一个丢失的头文件的荒谬痛苦的过程):

-Imbed-os
-Imbed-os/cmsis
-Imbed-os/cmsis/TARGET_CORTEX_M
-Imbed-os/cmsis/TARGET_CORTEX_M/TOOLCHAIN_GCC
-Imbed-os/drivers
-Imbed-os/events
-Imbed-os/features
-Imbed-os/hal
-Imbed-os/platform
-Imbed-os/rtos
-Imbed-os/targets
-Imbed-os/targets/TARGET_NORDIC/TARGET_NRF5
-Imbed-os/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF52832
-Imbed-os/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF52832/TARGET_NRF52_DK
-Imbed-os/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF52832/device
-Imbed-os/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_SDK11/device
-Imbed-os/tools

这根本不是一个完整的列表,但我几乎宁愿在这种状态下遇到编译器错误并处理这些错误,而不是继续寻找头文件。

【问题讨论】:

  • 使用 GCC,您可以使用选项 -Imbed-os/-I 选项只是告诉编译器在哪里寻找包含的文件
  • 谢谢@FranciscoGallegoSalido - 不幸的是这不是递归的,所以有点痛苦(见上面的更新)。
  • 我认为除了在每个项目的基础上定义所有编译器标志/包含之外,没有其他方法。您可以编写一些东西来解析 Makefile 中的包含并将其放入 syntatic_cpp_config 文件中。我不再这样做,而是将错误编译并加载到 quickfix 列表中。顺便说一句,Ale 是一个大大改进的语法检查器,因为它异步运行。
  • @GTF 我认为你所能做的就是你现在正在做的事情(搜索每一个给你错误的路径)或者在包含你的头文件时使用完整路径,所以而不是#include "my_header.h",做#include "path/to/header/my_header.h",所以你明确地给出文件的路径。我想不出其他解决方案。
  • @tuna_fish 感谢 ALE 的推荐,我去看看。

标签: c++ gcc vim syntastic


【解决方案1】:

您可以通过使用以下代码生成项目的 Makefile 来获得详尽的标志列表:
mbed export -i make_gcc_arm -m K64F --profile mbed-os/tools/profiles/debug.json

cf:https://os.mbed.com/docs/v5.6/tools/debugging.html

【讨论】: