WSL 使获取 gcc 和其他 Linux 工具变得容易。您可以使用脚本来快速配置 WSL 开发环境,因此如果您搞砸了某些事情,您可以快速销毁它并以最低的成本重新开始。因此,我想在 WSL 上而不是在 Windows 本身上运行任务。
例如,在 Sublime3 中,我可以使用 GCC 的 WSL 安装构建 C 代码,只需使用以下代码创建一个新的构建系统:
{
"cmd" : ["bash", "-c", "gcc ${file_name} -o ${file_base_name} && ./${file_base_name}"],
"shell": true,
"working_dir": "${file_path}",
}
到目前为止,我一直试图弄清楚如何在 VS Code 上复制它,但没有运气。似乎至少有其他人设法获得了这个 working,所以它应该是可能的。
似乎正确的方法是配置一个
tasks.json
文件。相关行似乎是:"command": "bash.exe",
"args": ["-c", "'insert code here'"]
似乎这告诉 powershell 运行
bash -c 'insert code here'
。谁能想出正确的命令?一些背景:
${file}
是一个变量,表示 VSCode 中的事件文件。这是所有 predefined variables 的列表。wslpath
是 Windows 1803 中的新 bash 命令,它采用 Windows 路径并返回 wsl 路径,例如:$ wslpath "c:\Users\Evan\Google Drive\Development\Programming Languages\file.c"
/mnt/c/Users/Evan/Google Drive/Development/Programming Languages/file.c
我的尝试:
我尝试编写一个脚本来做到这一点,但遇到了问题。调用
myscript
的 tasks.json 语法应该是这样的(注意我们将文件名传递给脚本,以便脚本可以将其传递给 GCC)。"args": ["-c", "'myscript.sh \"${file}\"'"]
或者按照这个 answer
"command": "/path/to/script.sh"
"args": ["\"${file}\""]
myscript
可能看起来像这样:#!/bin/bash
echo "File Path is here $1"
x=$(wslpath "$1")
gcc "$x" -o a.out
./a.out
VS Code Docs
最佳答案
它可以在没有脚本的情况下完成:
"command": "gcc '$(wslpath '${file}')' && ./a.out"
${file}
将在 bash 中解析命令之前解析。关于bash - VS Code : Running Tasks with WSL/Bash,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50513784/