想要 ${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
.
这里有两个微妙之处:
我明确指定了 sh
的路径。那是因为我也
在我的 $PATH 上有 git for Windows,
它出现在我的 Cygwin 路径之前,因此 vscode 将使用它
git
。但是 git for Windows 也有 sh.exe
,如果那个
在这里使用,make
因 Cygwin DLL 错误而爆炸。
我必须将默认值 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.exe
和 powershell.exe
)增加额外的复杂性和脆弱性。
在需要 ${workspaceFolder}
的地方使用扩展名 command-variable 中的变量 extension.commandvariable.workspace.workspaceFolderPosix
和正斜杠。此扩展中还有其他有用的替换。
我正在 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
.
这里有两个微妙之处:
我明确指定了
sh
的路径。那是因为我也 在我的 $PATH 上有 git for Windows, 它出现在我的 Cygwin 路径之前,因此 vscode 将使用它git
。但是 git for Windows 也有sh.exe
,如果那个 在这里使用,make
因 Cygwin DLL 错误而爆炸。我必须将默认值 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.exe
和 powershell.exe
)增加额外的复杂性和脆弱性。
在需要 ${workspaceFolder}
的地方使用扩展名 command-variable 中的变量 extension.commandvariable.workspace.workspaceFolderPosix
和正斜杠。此扩展中还有其他有用的替换。