如何修复 WSL 上的智能感知“无法找到符号的定义”

use*_*913 6 c++ intellisense include visual-studio windows-subsystem-for-linux

我正在 Visual Studio 2017 中构建一个解决方案,我们在 WSL 上针对 ARM64 目标进行交叉编译。

我已设置所有包含路径,并且编译似乎适用于该特定文件。有问题的标头位于 W:\ 驱动器上,这是 WSL 文件系统

在文件顶部的 #include 行,我可以单击有问题的标题 () 并右键单击以打开文档。这将打开正确的标题,我的定义位于这个新打开的文档中。智能感知似乎无法在此文件上正常工作,因为似乎没有正确突出显示任何枚举或定义。

但是,如果我要使用 .c 文件中的定义并尝试转到定义,我会得到“无法找到符号 'V4L2_PIX_FMT_HEVC' 的定义”

将有问题的标头移动到 C:\ 驱动器并将包含路径更改为相应的新路径时,Intellisense 似乎可以识别定义并且“转到定义”可以正常工作

#include <linux/videodev2.h> //Open document works
#include <linux/v4l2-controls.h> //Open document works

...
case UDP_VIDEO_PROTOCOL_MPEG2:
    codec = V4L2_PIX_FMT_MPEG2; //Go to definition does not work
    break;
case UDP_VIDEO_PROTOCOL_H265:
    codec = V4L2_PIX_FMT_HEVC; //Go to definition does not work

Run Code Online (Sandbox Code Playgroud)

use*_*913 0

看起来该问题源于 WSL 中创建的文件不支持 Intellisense

https://developercommunity.visualstudio.com/content/problem/259166/intellisense-not-working-for-files-created-under-w.html

显然,在撰写本文时,该问题据称已在 Visual Studio 2019 中得到解决,但我尚未进行测试。为了解决这个问题而将我的工作场所切换到 Visual Studio 预览版并不容易。