【发布时间】: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 的推荐,我去看看。