WSL2上的C++ Visual Studio makefile项目

k3bvogb1  于 2023-05-02  发布在  其他
关注(0)|答案(1)|浏览(112)

我有一个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项目?

jtw3ybtb

jtw3ybtb1#

是的,有可能。我刚刚为自己解决了它。(这个答案可能有点晚了,但我在试图解决同样的问题时偶然发现了这个问题。)FWIW。我坚持解决这个问题,因为Visual Studio Code可以调试远程应用程序,所以Visual Studio肯定也能。..
我正在使用Visual Studio 2022与WSL 2和Ubuntu 22。04(果酱)。
一些信息来自https://devblogs.microsoft.com/cppblog/targeting-windows-subsystem-for-linux-from-visual-studio/,它是旧的,针对WSL 1。尽管如此,其中一些仍然是相关的;他们只是忘记了在OP引用的文档中保留此信息。
先决条件:

  • 在Visual Studio中,WSL 2已按照https://learn.microsoft.com/en-us/windows/wsl/install中的说明安装。
  • 在Visual Studio中,确保安装了“使用C++进行Linux开发”功能。如果没有,请运行“Visual Studio安装程序”并安装它。
  • 在Visual Studio中,添加到WSL的连接:
  • 从工具/选项/跨平台/连接管理器-使用您的WSL/Linux凭据添加到localhost的连接。
  • 在Linux中,安装gdb和ssh包,以及net-tools(用于ifconfig):

sudo apt install gdb ssh net-tools
SSH:

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

sudo service ssh start

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

在Visual Studio中,通过File/New/Project创建一个新项目。其中一个(新可用的)选项应该是“Makefile Project(Bring your own build system to build on Linux)”,选择它。默认情况下,创建的解决方案位于Windows配置文件目录中。它应该包含一个空的Linux项目。作为到目前为止正确的线索,空项目的名称应该附加(Linux),“Debug target”应该是新添加的“localhost(x64)”连接(通常是“Local Windows Debugger”)。
现在,必须用Linux应用程序的详细信息填充空的Linux项目:

  • 打开Linux项目的属性(只是为了清楚起见,而不是解决方案),并根据需要修改属性。这些是我设置的:
  • 常规/远程生成根目录。设置为应用程序的Linux根路径,e.例如~/path/to/appDir。
  • 常规/远程项目根目录。我查过了。
  • 常规/远程部署目录。与RPRD一起,只需设置为$(RemoteRootDir)。
  • Debugging/Program,可执行文件的路径,e.例如~/path/to/appDir/relativeDir/app.
  • 调试/程序参数,设置为taste。
  • Debugging/Working Directory(调试/工作目录),运行应用程序的cwd。
  • 通过右键单击空项目并选择“添加/现有项”,将源文件添加到空项目中。这些是Linux文件,Linux发行版应该直接在文件资源管理器的Desktop下找到,从那里找到应用程序的文件。Visual Studio的缺点是一次只能添加一个目录,但是您希望在调试器中检查的所有源文件都必须以这种方式添加。文件似乎不会像使用本地调试器时那样自动找到。

应该是这样的,现在可以选择断点,按F5,应用程序将在调试器中启动。
最后,如果我错过了一步,我道歉(我希望不是)。在我让它工作之前,我尝试了各种其他的东西。

相关问题