想要 ${workspaceFolder} 在 Windows 上发出正斜杠?

Want ${workspaceFolder} to emit forward slashes on Windows?

我正在 tasks.json 中配置一个 VSCode 任务,我需要将 ${workspaceFolder} 传递给 'make' 命令,但是它需要是正斜杠,不是反斜杠。

{
"version": "2.0.0",
"echoCommand": true, 
"tasks": [
    {
        "label": "build",
        "type": "shell",
        "group": {
            "kind": "build",
            "isDefault": true
        },
        "command": "make",
        "args": [
            "APPDIR=\"${workspaceFolder}\""
        ]
. . .

有没有办法修改 ${workspaceFolder} 以在 Windows 上发出正斜杠? 或者,有没有宏之类的东西,我可以在那里搜索和替换?

编辑: 我的根本问题是 GNU make 似乎转义了来自 APPDIR 的反斜杠,例如:C:\somedirectory\someotherdirectory\athirddirectory。 我想如果我可以切换到正斜杠,它会解决这个问题。 我无法控制也无法编辑 make 文件。

谢谢

-约翰

虽然没有明确说明,但听起来您正在使用 Windows 并使用 Cygwin make。

基本上使用 Johan 的建议,这里是一个完整的 tasks.json,它使用 cygpath -m 将正斜杠传递给 make:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build hello world",
            "type": "shell",
            "command": "d:/cygwin64/bin/sh",
            "args": [
                "-c",
                "make APPDIR=$(cygpath -m '${workspaceFolder}')"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

下面是一个要调用的示例 Makefile

$(info APPDIR is "$(APPDIR)")

helloworld.exe: helloworld.cpp
    g++ -g -Wall -std=c++11 -o $@ helloworld.cpp

当我按 Ctrl+Shift+B 调用此任务时,我在终端中看到 window:

> Executing task in folder cpphello: d:/cygwin64/bin/sh -c "make APPDIR=$(cygpath -m 'D:\wrk\learn\vscode\cpphello')" <

APPDIR is "D:/wrk/learn/vscode/cpphello"
make: 'helloworld.exe' is up to date.

Terminal will be reused by tasks, press any key to close it.

这使用 -m(混合)切换到 cygpath 来获得看起来像 Windows 路径但使用正斜杠的路径。 cygpath还有其他选择;见 cygpath --help.

这里有两个微妙之处:

  1. 我明确指定了 sh 的路径。那是因为我也 在我的 $PATH 上有 git for Windows, 它出现在我的 Cygwin 路径之前,因此 vscode 将使用它 git。但是 git for Windows 也有 sh.exe,如果那个 在这里使用,make 因 Cygwin DLL 错误而爆炸。

  2. 我必须将默认值 VSCode shell 更改为 cmd.exe,而 默认值为 powershell.exe。电源问题shell 这里是 VSCode 在将参数传递给时使用单引号 它,而我的解决方案要求 VSCode 使用双引号, 它用 cmd.exe 做的。要更改 shell,请使用 "Terminal: Select Default Shell" 来自调色板的命令 (Ctrl+Shift+P).

最后,我会指出,如果在您的情况下,您可以创建一个中间 bash shell 脚本而不是直接调用 make,那么所有这些废话都可以避免. tasks.json 语言不是很强大,古怪的 shells VSCode 知道如何在 Windows 上调用(即 cmd.exepowershell.exe)增加额外的复杂性和脆弱性。

在需要 ${workspaceFolder} 的地方使用扩展名 command-variable 中的变量 extension.commandvariable.workspace.workspaceFolderPosix 和正斜杠。此扩展中还有其他有用的替换。