VS 代码 c_cpp_configuration.json includePath 和 ** 用于内核头文件不起作用

问题描述 投票:0回答:1

在 VS Code 中开发 Linux 内核模块时,我偶然发现了一个有趣的行为。

有了这个

c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/src/linux-headers-5.15.0-91-generic/arch/x86/include",
                "/usr/src/linux-headers-5.15.0-91-generic/arch/x86/include/generated",
                "/usr/src/linux-headers-5.15.0-91-generic/include",
                "/usr/src/linux-headers-5.15.0-91-generic/arch/x86/include/uapi",
                "/usr/src/linux-headers-5.15.0-91-generic/arch/x86/include/generated/uapi",
                "/usr/src/linux-headers-5.15.0-91-generic/include/uapi",
                "/usr/src/linux-headers-5.15.0-91-generic/include/generated/uapi",
                "/usr/src/linux-headers-5.15.0-91-generic/ubuntu/include",
                "/usr/lib/gcc/x86_64-linux-gnu/9/include"
            ],
            "defines": [
                "__GNUC__",
                "__KERNEL__"
            ],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c17",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

一切正常:所有

#include <linux/...>
都得到正确解决。

有了这个

c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/src/linux-headers-5.15.0-91-generic/**",
                "/usr/lib/gcc/x86_64-linux-gnu/9/include"
            ],
            "defines": [
                "__GNUC__",
                "__KERNEL__"
            ],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c17",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

我收到的错误基本上是说几乎所有(如果不是全部)我的内核特定结构、函数和宏都未定义。

这是为什么? 第二个配置应该包含第一个配置的所有路径。

linux visual-studio-code linux-kernel include-path linux-kernel-headers
1个回答
0
投票

我想我可以重现这个(不确定是否完全相同的原因)。我无法说出原因,但我想我找到了解决方法:

我可以通过使用

/.../**/*
而不是
/.../**
来获得递归性。

虽然这有点......沉重和凌乱。除非你真的想要完全递归,否则我可以建议你这样做吗?

"/usr/src/linux-headers-<version>-generic/**/include",
"/usr/src/linux-headers-<version>-generic/**/include/generated",
"/usr/src/linux-headers-<version>-generic/**/include/uapi",
"/usr/src/linux-headers-<version>-generic/**/include/generated/uapi",
© www.soinside.com 2019 - 2024. All rights reserved.