如何在Windows和WSL/Linux之间同步代码文件?

10

基本上,我有一些 C/C++ 代码需要在 Linux 机器上构建和调试。不幸的是,我的 Windows 笔记本电脑没有足够的硬盘空间来安装某些 Linux 发行版,也没有足够的可用 RAM 来舒适地运行虚拟机。

到目前为止,我使用 WSL 处理得相当顺利,但规模比较小。通过 CLI 和 gdb 编辑和调试 2-3 个 .c 文件很容易,但在大型项目上变得非常麻烦。

我想要一个简单的方案:“在 Windows IDE [X] 中编辑代码,在远程 Linux/WSL 上编译(该项目使用 Makefile),最好通过 gdb 进行调试”。

VS 有类似我想要的功能,但它无法处理现有的 Linux 项目。它需要创建一个新的配置,这对项目的 Makefile 来说是陌生的。


据我所知,WSL通过/mnt/c//mnt/d/等方式访问Windows文件系统。 - Shawn
@Shawn 是的,但是修改“共享”文件是极不鼓励的。 - Dan M.
一种选择是将项目放在Linux系统上,并通过Sublime或Atom文本编辑器在Windows机器上远程打开它们,同时保持一个SSH会话以便进行调试/构建项目。 - Arshan
@Arshan 这可能会导致问题,因为WSL期望文件附加某些元数据,而在Windows上编辑这些元数据可能会导致错误(即使最新更新已经改善了情况,仍不建议这样做)。 - Dan M.
3个回答

7

我知道这个问题有点老了,但我认为解决方法是在你的WSL文件夹和Windows文件夹之间创建符号链接。以下是我处理Ubuntu-20.04 WSL的方式:

  1. 以管理员模式访问PowerShell
  2. 在PowerShell中键入cmd.exe
  3. 一旦打开cmd.exe,键入 mklink /d C:\<path_to_your_Windows_folder> \\wsl$\Ubuntu-20.04\home\<your_user>\<path_to_your_WSL_folder>

编辑 此方法已在Windows 10版本2004和WSL2下进行测试。


这只适用于WSL2,你正在使用W10 2004的WSL2吗?(https://learn.microsoft.com/en-us/windows/whats-new/whats-new-windows-10-version-2004#virtualization) - VonC
我确实正在使用WSL2和W10 2004,但根据https://dev59.com/Vq7la4cB1Zd3GeqPh7dL#56434613,自W10 1903以来就可以访问wsl文件夹。我猜只要我们通过网络接口可以访问wsl文件夹,mklink就可以正常工作。 - Luan Rios Campos

2

我对C和C++不确定,但听起来这与我每天在node和javascript中工作的方式完全相同。

我使用WSL在/mnt/c/code/myproject位置检出我的代码。然后使用sublime/VS code/webstorm在Windows中的c:\code\myproject位置编辑文件,这样做非常好,我已经这样做了一年多。

需要注意的是,您需要确保您选择的编辑器将文件保存为Linux行尾,并且所有命令行操作都在WSL内完成。

请参阅此文章以了解Windows和Linux文件之间的区别以及在WSL内如何工作。


接受这个,因为这与我最终所做的相似。 - Dan M.

2
我想要一个简单的方式,就像在Windows IDE中编辑代码,在远程Linux/WSL上编译它。只有在Windows 19.03中才能做到这样简单:
参考“Updated WSL in Windows 10 version 1903 lets you access Linux files from Windows”,你将会得到如此简单的方法。
Microsoft的Craig Loewen说:
过去,在Windows上创建和更改Linux文件会导致文件丢失或数据损坏。这是一个备受期待的功能。我们很自豪地宣布,现在您可以轻松地从Windows访问Linux发行版中的所有文件。
那么这是如何工作的呢?他接着解释道:
简而言之:9P协议文件服务器处理与文件相关的请求,Windows充当客户端。
我们修改了WSL init守护进程以包括9P服务器。该服务器包含支持Linux元数据(包括权限)的协议。 有一个Windows服务和驱动程序充当客户端,并与运行在WSL实例内部的9P服务器进行通信。 客户端和服务器通过AF_UNIX套接字进行通信,因为WSL允许使用AF_UNIX进行Windows应用程序和Linux应用程序之间的互操作,如此在此帖子中所述。
警告:
旧规则仍然适用,您不应该在AppData文件夹内访问Linux文件!如果您尝试通过AppData文件夹访问Linux文件,则绕过使用9P服务器,这意味着您将无法访问Linux文件,并且可能会损坏Linux发行版。

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