7

我在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 文件。

谢谢

-约翰

4

2 回答 2

1

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

于 2020-07-01T07:49:34.233 回答
1

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

基本上使用约翰的建议,这是一个完整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 调用此任务时,我在终端窗口中看到:

> 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 上还有适用于 Windows 的 git,它位于我的 Cygwin 路径之前,因此 vscode 将使用它 git。但是 git for Windows 也有sh.exe,如果在这里使用那个,会make因 Cygwin DLL 错误而爆炸。

  2. 我不得不将默认的 VSCode shell 更改为cmd.exe,而默认值为powershell.exe. powershell 的问题是 VSCode 在向其传递参数时使用单引号,而我的解决方案要求 VSCode 使用双引号,它使用cmd.exe. 要更改外壳,请使用面板中的“终端:选择默认外壳”命令 (Ctrl+Shift+P)。

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

于 2019-08-30T17:26:40.540 回答