如何在 Visual Studio Code 中的 Windows 子系统中设置包含路径

6

我目前正在使用一台Windows机器,并希望尝试使用Windows子系统Linux(WSL)进行C++开发。Visual Studio Code(VSC)提供了一个漂亮的扩展来支持在子系统上工作,非常好用。但有一件事情我还没能解决,就是无法让VSC包含位于子系统内部的标头文件。

我知道可以手动添加新路径到´c_cpp_properties.json´中的include列表中,但是我不知道应该从Windows指向哪些具体路径,以便能够找到子系统内的/usr/include等路径。我查阅了一些资源(wsl include paths),但始终无法解决问题。我也尝试按照Gitlab的问题描述自己生成路径,但仍然没有效果。

有没有人在为C++项目设置VSC和WSL方面有经验,可以帮帮我吗?


你有按照指南操作吗?https://code.visualstudio.com/docs/remote/wsl - WBuck
有点。但我在那里找不到如何设置包含路径的信息?还是我太瞎了.. :D - A. Osterthun
我看到人们使用像rsync这样的工具,只是将所需的头文件复制到本地机器上,以便将其指向vac。在我看来,这似乎有点繁琐。仍在寻找更集成的方法。 - A. Osterthun
你在WSL中使用哪个发行版?你已经安装了必要的软件包和VS Code扩展吗? - sweenish
3个回答

1
这个问题缺少一些信息,比如你使用的发行版和你遵循的设置步骤。这意味着我将做出一些假设并重复你可能已经知道的信息。
假设:一个基于Debian的发行版 sudo apt update && sudo apt upgrade -y && sudo apt install build-essential -y 您可能还需要安装git或cmake或其他项目所需的任何其他工具。
将C/C++扩展程序安装到远程计算机中。安装任何其他有益的扩展程序,例如如果您正在使用cmake,则安装cmake。
需要更改的设置(全局) "C_Cpp.default.compilerPath": "/absolute/path/to/your/compiler",
"files.eol": "\n",
"C_Cpp.default.cppStandard": "<SET>",
"C_Cpp.default.cStandard": "<SET>",
"C_Cpp.default.intelliSenseMode": "<SET>", 最后三个需要根据您公司/项目的指南进行设置。
此时,您应该能够编写使用C++标准库的代码,并且具有适当的Intellisense工作。
您的主要问题似乎是关于添加项目特定的包含路径。这由c_cpp_properties.json文件处理。您的硬盘位于/mnt。指定您的路径。不过,更好的方法是简单地使用VS Code变量。像${workspaceFolder}/include这样的东西应该就足够了。

1
这是我最初尝试自己解决这个问题的方式。我在WSL中有一个包含所有cpp项目的文件夹。当我在这些项目上工作时,我会在VSC中打开该文件夹。问题在于,VSC使用为打开的文件夹提供的配置。我错误地认为,VSC会将每个包含.vscode文件夹的文件夹解释为它自己的项目。直接打开项目时,一切都按预期工作。无论如何,还是谢谢。c_cpp_properties.json(或者说.vscode文件夹)并不是直接的解决方案。 - A. Osterthun
在Windows 11、WSL和Ubuntu中遇到了同样的问题。看到上面的“/absolute/path”,我解决了符号链接链并将“compilerPath”设置为“/usr/bin/x86_64-linux-gnu-gcc-9”。现在,每个VS Code找不到的文件在其完整路径中都有一个“+”字符。 - kippsoftware

1
当我尝试在 vscode 上使用 wsl 并将其转换时,会出现错误。但你仍然可以使用该库: wsl 服务器预览的 vscode 我没有使用额外的配置。
{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/clang-7",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "linux-clang-x64"
        }
    ],
    "version": 4
}

我认为这应该被转交给WSL团队。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接