c语言 - 为什么 VSCode 总是警告我包含错误?



当我在STM32项目上编程时,VSCode不断在代码#include "main.h"下划线,原因如下:

检测到 #include 错误。请更新您的包含路径。此翻译单元禁用波浪线。 无法打开源文件"stm32f1xx.h"("main.h"的依赖项)

但是,我仔细检查了我的c_cpp_properties.json,发现没有任何问题。同时,VSCode 为我提供了快速修复方法,将${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include添加到includePath参数中,这也不起作用。

以下是我的配置。

{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE",
"USE_HAL_DRIVER",
"STM32F103xE"
],
"cStandard": "c17",
"cppStandard": "c++17",
"compilerPath": "C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.07\bin\arm-none-eabi-gcc.exe",
"intelliSenseMode": "gcc-arm"
},
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE",
"USE_HAL_DRIVER",
"STM32F103xE"
],
"cStandard": "c17",
"cppStandard": "c++17",
"compilerPath": "/opt/ARM/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gcc",
"intelliSenseMode": "gcc-arm"
}
],
"version": 4
}

并且所需的文件/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h确实存在,并且也可以正确完成make的编译。

我已经多次检查文件,但没有发现任何问题,如下所示:

在此处输入图像描述

你必须告诉 vscode 在哪里可以找到所需的所有包含文件.
当您将包含文件夹添加到includePath时,文件夹内包含的标头可能包含来自其他地方的其他标头。这可以解释为什么在向includePath添加单个路径后仍然收到错误。

使用 CubeMX 生成的项目通常具有多个包含文件夹。

您的配置文件应如下所示

"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/Core/Inc/**",
"${workspaceFolder}/Drivers/STM32F0xx_HAL_Driver/Inc/**",
"${workspaceFolder}/Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/**",
"${workspaceFolder}/Drivers/CMSIS/Include/**",
"${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F0xx/Include/**"
],
"defines": ["STM32F031x6","USE_HAL_DRIVER"],
"compilerPath": "path_to_compiler",
"cStandard": "gnu17",
"cppStandard": "gnu++14",
"intelliSenseMode": "linux-gcc-x64"
}
],

要找到所需的文件夹,您必须执行此操作:

使用生成文件

如果你有一个有效的 Makefile,它可能包含一个定义使用的头文件的地方,例如:

C_INCLUDES =  
-IDrivers/STM32F0xx_HAL_Driver/Inc 
-IDrivers/STM32F0xx_HAL_Driver/Inc/Legacy 
-IDrivers/CMSIS/Device/ST/STM32F0xx/Include 
-IDrivers/CMSIS/Include

使用 Vscode 智能感知

如果缺少标头,Vscode 将显示以下错误

cannot open source file "HEADER2.h" (dependency of "HEADER1.h")

这意味着HEADER2.h包含在HEADER1.h中,但includePath中没有HEADER2.h

因此,您应该找到包含HEADER2.h的文件夹并添加它.
为此,您可以使用项目根目录中的find . -name "HEADER2.h"

相关内容

  • 没有找到相关文章

最新更新