WSL2上的C++Visual Studio makefile项目



我有一个C++项目,我使用makefile(由我编写,而不是自动生成(进行交叉编译。我最近转到了WSL2,从那以后就错过了使用Eclipse的美好时光(Visual Studio代码甚至还没有达到Eclipse的功能(。

我决定试试Visual Studio,但我所能找到的只是这篇关于VS+WSL2+cmake的文章。https://learn.microsoft.com/en-us/cpp/build/walkthrough-build-debug-wsl2?view=msvc-170

是否可以使用Visual Studio在WSL2下创建一个C++makefile项目?

是的,这是可能的。我刚刚自己解决了这个问题。(这个答案可能晚了,但我在试图解决同样的问题时偶然发现了这个问题。(FWIW。我坚持解决它,因为Visual Studio代码可以调试远程应用程序,所以Visual Studio肯定能够…

我正在将Visual Studio 2022与WSL2和Ubuntu 22.04(jammy(一起使用。

一些信息来源于https://devblogs.microsoft.com/cppblog/targeting-windows-subsystem-for-linux-from-visual-studio/,是针对WSL1的旧版本。尽管如此,其中一些仍然具有相关性;他们只是忘记在OP提到的文档中保留这些信息。

先决条件:

  • 在Visual Studio中,WSL2已按照中的说明安装https://learn.microsoft.com/en-us/windows/wsl/install.

  • 在Visual Studio中,确保;用C++开发Linux";功能已安装。如果没有,则运行";Visual Studio安装程序";并安装它。

  • 在Visual Studio中,添加到WSL:的连接

    • 从Tools/Options/Cross-Platform/Connection Manager-使用WSL/Linux凭据添加到localhost的连接
  • 在Linux中,安装gdb和ssh包以及网络工具(用于ifconfig(:

    sudo apt install gdb ssh net-tools

SSH:

  • 在Linux中,启动ssh服务。每次第一次bash会话启动时都需要这样做:

    sudo service ssh start

  • 在Windows上,检查是否可以使用ssh <ip>与WSL建立ssh连接,其中"ip"是通过在Linux上运行ifconfig发现的。

在Visual Studio中,通过文件/new/project创建一个新项目。(新可用的(选项之一应该是";Makefile Project(自带构建系统在Linux上构建(";,选择它。默认情况下,创建的解决方案位于Windows配置文件目录中。它应该包含一个空的Linux项目。作为到目前为止事情是正确的线索,空项目的名称应该加上(Linux(;调试目标";应该是新添加的";localhost(x64(";连接(通常是"本地Windows调试器"(。

现在,空的Linux项目必须填写Linux应用程序的详细信息:

  • 打开Linux项目的属性(只是为了清楚起见,而不是解决方案(,并根据需要修改属性。这些是我设置的:

    • 常规/远程生成根目录。设置为应用程序的Linux根路径,例如~/path/to/appDir
    • 常规/远程项目根目录。我澄清了这个
    • 常规/远程部署目录。与RPRD配合使用,只需设置为$(RemoteRootDir(
    • 调试/程序,可执行文件的路径,例如~/path/to/appDir/rerelativeDir/app
    • 调试/程序参数,设置为味道
    • 调试/工作目录,运行应用程序的cwd
  • 右键单击源文件并选择"添加/现有项",即可将源文件添加到空项目中。这些都是Linux文件,Linux发行版应该直接在文件资源管理器的桌面下找到,从那里找到应用程序的文件。Visual Studio的问题在于,一次只能添加一个目录,但必须以这种方式添加要在调试器中检查的所有源文件。文件似乎不会像使用本地调试器时那样自动找到。

应该就是这样,现在可以选择断点,按F5键,应用程序将在调试器中启动。

最后,如果我错过了一步,请道歉(我希望不会(。在我开始工作之前,我尝试了各种其他的东西。

最新更新