【问题标题】:Why is VSCode keep warning me about include errors?为什么 VSCode 一直警告我包含错误?
【发布时间】:2022-01-05 10:16:15
【问题描述】:

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

#include 检测到错误。请更新您的 includePath。此翻译单元禁用曲线。 无法打开源文件“stm32f1xx.h”(依赖于“main.h”)

但是,我仔细检查了我的c_cpp_properties.json,没有发现任何问题。同时,VSCode给了我快速修复的方法,在includePath参数中添加${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include,同样无效。

以下是我的配置。

{
    "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的编译也可以正确完成。

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

enter image description here

【问题讨论】:

  • 在哪种配置下需要该路径,Win32 还是 Linux? /Drivers/...看起来像 Linux,这是完整路径吗
  • /Drivers/... 表示项目文件夹下的Drivers 文件夹,例如STM32Project/Drivers/...
  • 嗨,Futurime,首先你在文件资源管理器中看到那个文件吗?我的意思是main.h?
  • .. 和那个 Drivers 文件夹的相同问题 :) 我认为你在 Cube IDE 或其他东西中创建了项目,然后没有标记检查将必要的文件复制到文件夹,所以现在你从另一个使用它们磁盘本地化。
  • 我确实标记了复选框以复制文件。我发布了 VSCode 的屏幕截图,其中包含了必要的文件。

标签: c visual-studio-code vscode-settings stm32


【解决方案1】:

你必须告诉 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

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

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

使用 Vscode 智能感知

如果缺少header,Vscode会显示如下错误

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-10
    • 2015-05-07
    • 2021-08-12
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 2021-12-20
    相关资源
    最近更新 更多