首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么VSCode总是警告我包含错误?

为什么VSCode总是警告我包含错误?
EN

Stack Overflow用户
提问于 2021-11-28 00:53:21
回答 1查看 553关注 0票数 1

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

#包括检测到的错误。请更新您的includePath。此翻译单元禁用Squiggles。无法打开源文件“stm32f1x.h”(“main.h”的依赖性)

然而,我再次检查了我的c_cpp_properties.json,发现它没有任何问题。同时,VSCode给出了快速修复方法,将${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include添加到includePath参数中,这也不起作用。

胸罩是我的配置。

代码语言:javascript
复制
{
    "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编译也是可以正确的。

我已经多次检查这些文件,但没有发现任何问题,比如:

在这里输入图像描述

EN

回答 1

Stack Overflow用户

发布于 2021-12-08 15:28:55

您必须告诉vscode在哪里可以找到所需的所有包含文件。

includePath添加包含文件夹时,文件夹中包含的标头可能包括其他地方的其他标头。这可能解释为什么在向includePath添加单一路径后仍然会出现错误。

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

您的配置文件应该如下所示

代码语言:javascript
复制
"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

如果您有一个工作的Makefile,它可能包含一个位置,其中它定义了使用的头文件,例如:

代码语言:javascript
复制
C_INCLUDES =  \
-IDrivers/STM32F0xx_HAL_Driver/Inc \
-IDrivers/STM32F0xx_HAL_Driver/Inc/Legacy \
-IDrivers/CMSIS/Device/ST/STM32F0xx/Include \
-IDrivers/CMSIS/Include

使用Vscode智能感知

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

代码语言:javascript
复制
cannot open source file "HEADER2.h" (dependency of "HEADER1.h")

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

因此,您应该找到包含HEADER2.h的文件夹并添加它。

要做到这一点,您可以从项目的根使用find . -name "HEADER2.h"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70139876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档