使用Sublime Text从Windows子系统Linux(WSL)中操作

12
我想在Sublime Text中使用gcc、g++和make来编译C和C ++代码,以便在Windows上生成Linux可执行文件。 但是我无法在Sublime Text中运行bash.exe,与其他许多Stack Overflow用户一样。
4个回答

10
  1. 您需要将C:\Windows\System32\bash.exe文件复制到C:\Windows\SysWOW64\目录中。这是因为WoW64文件系统重定向所需(感谢Martin!)

  2. 然后您需要在Sublime Text中创建一个新的构建系统,其中包含以下代码。(工具 -> 构建系统 -> 新建构建系统...

{
  "cmd" : ["bash", "-c", "gcc ${file_name} -o ${file_base_name} && ./${file_base_name}"],
  "shell": true,
  "working_dir": "${file_path}",
}

这段代码将编译 .c 代码,然后运行它。输出将显示在 Sublime 的构建结果面板中。

  • 当您想要使用此构建系统时,请在 工具 -> 构建系统 列表中选择它,然后按下 Ctrl + B

  • 您可以自定义我放置的命令,主要是您可以使用 bash -c "CommandsYouWantToRun" 运行 Linux 命令。


    在64位Windows上使用32位Sublime Text时,第一步必要吗?我在Super User上曾经有一个类似的问题,这就是为什么我问的原因。 - idleberg
    是的,我认为可以。我也使用32位的Sublime Text,这对我有效。 - Fontinalis
    3
    附注:第一步是必需的,因为存在WoW64文件系统重定向 - Martin
    根据你的话,我添加了一条注释。谢谢提供这些信息。 - Fontinalis
    对我来说不起作用,显示CMD不接受UNC路径(工作目录为\wsl$\etc)。 - br4nnigan
    显示剩余2条评论

    3

    在WSL2中,我认为最好的方法是使用下面的sublime-build文件。

    • 您需要在Sublime Text中创建一个新的构建系统,并使用以下代码。
      (工具 -> 构建系统 -> 新建构建系统...)
        {
        "shell_cmd": "ubuntu run \"g++ `wslpath '${file}'` && ./a.out<inp.in>out.in \" ",
        "shell":true,
        "working_dir":"$file_path",
        "selector":"$file_name"
        }
    
    • 这段代码将编译 .cpp 代码,并将 inp.in 和 out.in 作为输入和输出文件(可选,如果不需要,请用 ./a.out 替换 ./a.out<inp.in>out.in)。输出结果将显示在 Sublime 的 Build Results 面板中。

    • 当您想使用此 Build System 时,请在 工具 -> 构建系统 列表中选择它,然后按下 Ctrl + B


    这个能使用 WSL 文件系统中的工作路径吗?当我运行我的文件时,出现了与地址(\wsl$\Ubuntu 等)相关的错误。 - user668074

    1

    这篇MS开发博客推荐使用wsl作为从Windows调用WSL命令行的默认方式。因此,原则上你的sublime构建配置应该如下所示:

    {
        "shell_cmd": "wsl -- <your-linux-build-command>",
        "shell": true,
    }
    

    一个注意事项是将Windows路径转换为Linux风格的正确方法,这需要在调用中作为子命令调用wslpath。例如:
    {
        "shell_cmd": "wsl -- cmake --build \\$(wslpath '$project_path\\build')",
        "shell": true,
    }
    

    注意,你需要使用两个\来避免Sublime的变量替换。
    这对于WSL 1和2都适用(至少对我来说)。

    1
    在WSL 2上,建议的解决方案不起作用。以下是一种解决方案,可在Windows上使用Sublime Text编辑的脚本上执行WSL 2目标。创建一个bash-wsl.sublime-build文件:
    {
        "shell_cmd": "bash -c \"wslpath '${file}'\" | bash -s",
        "shell": true,
    }
    

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