c++ - 无法识别 Visual Studio 代码任务构建“C:\Program”
问题描述
所以我正在使用 Visual Studio Code 来构建和运行一个简单的 C++ 程序。我使用 tasks.json 来处理编译:(基于此:How to compile C++ code with VS Code and cl
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Build Test",
"type": "shell",
"command": "cl",
"args": [
"/MDd",
"/W4",
"/EHsc",
"/ZI",
"/std:c++11",
"/Od",
"/Fe:${workspaceFolder}/Debug/test.exe",
"/Fd:${workspaceFolder}/Debug/",
"/Fo:${workspaceFolder}/Debug/",
"main.cpp"
],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "Build Release",
"type": "shell",
"command": "cl",
"args": [
"/MD",
"/W4",
"/EHsc",
"/std:c++11",
"/O2",
"/Fe:${workspaceFolder}/Release/test.exe",
"/Fd:${workspaceFolder}/Release/",
"/Fo:${workspaceFolder}/Release/",
"main.cpp"
]
}
]
}
但是当我尝试构建时,我得到以下输出:
Executing task: cl /MDd /W4 /EHsc /ZI /std:c++11 /Od "/Fe:G:\My Drive\Semester 3\CS 341\Project\Project 2/Debug/test.exe" "/Fd:G:\My Drive\Semester 3\CS 341\Project\Project 2/Debug/" "/Fo:G:\My Drive\Semester 3\CS 341\Project\Project 2/Debug/" main.cpp <
'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
我会注意到,我确实通过以下方式更改了设置:
"terminal.integrated.shellArgs.windows": [
"/k",
"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Auxiliary\\Build\\vcvars64.bat"
],
"terminal.integrated.shell.windows": "C:\\Windows\\System32\\cmd.exe"
我相信这就是“C:\Program”的来源。我只想在 Visual Studio 中构建和执行 C++ 程序,因此不胜感激。
编辑:
所以我决定添加C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Auxiliary\\Build
到 PATH 变量,然后我将设置更改为:
"terminal.integrated.shellArgs.windows": [
"/k",
"vcvars64.bat",
],
"terminal.integrated.shell.windows": "C:\\Windows\\System32\\cmd.exe"
这导致错误变为:
> Executing task: cl /MDd /W4 /EHsc /ZI /std:c++11 /Od "/Fe:G:\My Drive\Semester 3\CS 341\Project\Project 2/Debug/test.exe" "/Fd:G:\My Drive\Semester 3\CS 341\Project\Project 2/Debug/" "/Fo:G:\My Drive\Semester 3\CS 341\Project\Project 2/Debug/" main.cpp <
[ERROR:vcvarsall.bat] Invalid argument found : /d
[ERROR:vcvarsall.bat] Invalid argument found : /c
[ERROR:vcvarsall.bat] Invalid argument found : cl
[ERROR:vcvarsall.bat] Invalid argument found : /MDd
[ERROR:vcvarsall.bat] Invalid argument found : /W4
[ERROR:vcvarsall.bat] Invalid argument found : /EHsc
[ERROR:vcvarsall.bat] Invalid argument found : /ZI
[ERROR:vcvarsall.bat] Invalid argument found : /std:c++11
[ERROR:vcvarsall.bat] Invalid argument found : /Od
The syntax of the command is incorrect.
解决方案
空格和括号的问题可以通过转义字符来解决,在这种情况下,转义字符是插入符号 ( ^
)。使用提到的字符,您的相关行将settings.json
如下所示:
"terminal.integrated.shellArgs.windows": [
"/k",
"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio\\2017\\Community\\VC\\Auxiliary\\Build\\vcvars64.bat"
],
"terminal.integrated.shell.windows": "C:\\Windows\\System32\\cmd.exe"
这种方法的问题与您在将路径添加vcvars64.bat
到变量时遇到的问题相同,即在执行任务时,PATH
Visual Studio Code 会将前缀为and的值追加到值中。这导致将把提到的值作为参数而不是. 出现带有 标记的错误是因为拒绝附加到错误位置的参数。"command"
"args"
tasks.json
/d
/c
"terminal.integrated.shellArgs.windows"
vcvars64.bat
cmd.exe
[ERROR:vcvarsall.bat]
您可以通过为您的任务指定带有适当参数的 shell 来解决此问题,如下所示:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"options": {
"shell": {
"executable": "C:\\Windows\\System32\\cmd.exe",
"args": [
"/d", "/c",
"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio\\2017\\Community\\VC\\Auxiliary\\Build\\vcvars64.bat",
"&&"
]
}
},
"tasks": [
{
"label": "Build Test",
"type": "shell",
"command": "cl",
"args": [
"/MDd",
"/W4",
"/EHsc",
"/ZI",
"/std:c++11",
"/Od",
"/Fe:${workspaceFolder}/Debug/test.exe",
"/Fd:${workspaceFolder}/Debug/",
"/Fo:${workspaceFolder}/Debug/",
"main.cpp"
],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "Build Release",
"type": "shell",
"command": "cl",
"args": [
"/MD",
"/W4",
"/EHsc",
"/std:c++11",
"/O2",
"/Fe:${workspaceFolder}/Release/test.exe",
"/Fd:${workspaceFolder}/Release/",
"/Fo:${workspaceFolder}/Release/",
"main.cpp"
]
}
]
}
另一种方法是"terminal.integrated.shellArgs.windows"
留空,即不要将任何参数传递给cmd.exe
in settings.json
,然后将您的更改tasks.json
如下:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"options": {
"env": {
"build": "C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio\\2017\\Community\\VC\\Auxiliary\\Build\\vcvars64.bat && cl"
}
},
"tasks": [
{
"label": "Build Test",
"type": "shell",
"command": "%build%",
"args": [
"/MDd",
"/W4",
"/EHsc",
"/ZI",
"/std:c++11",
"/Od",
"/Fe:${workspaceFolder}/Debug/test.exe",
"/Fd:${workspaceFolder}/Debug/",
"/Fo:${workspaceFolder}/Debug/",
"main.cpp"
],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "Build Release",
"type": "shell",
"command": "%build%",
"args": [
"/MD",
"/W4",
"/EHsc",
"/std:c++11",
"/O2",
"/Fe:${workspaceFolder}/Release/test.exe",
"/Fd:${workspaceFolder}/Release/",
"/Fo:${workspaceFolder}/Release/",
"main.cpp"
]
}
]
}
vcvars64.bat
如果您从 Visual Studio 的开发人员命令提示符启动 Visual Studio Code,则可以省略在每次构建之前调用的必要性。为方便起见,您可以使用以下目标创建快捷方式:
cmd /d /c "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat" && start /b code
这将使开发人员命令提示符保持打开状态,可以按需关闭。
推荐阅读
- php - 图像未在 Laravel DOMPDF 中显示(仅在服务器中)
- c# - 将 ImageSource 转换为 Object 引发二进制流错误
- excel - DataGrip 将表值复制到 Excel 错误
- mongodb - 将带有 eval 的字符串插入 mongodb 时出现参考错误
- angular - 在定义的元素上遇到切片问题
- sql - 根据特定标准提取员工记录
- json - json.Decode 不解码数字
- python - Python 命名参数范围令人困惑,当它具有默认列表值时
- sql - 在 Oracle SQL 中查找重复项
- javascript - 如何使用 React Native(GeoFirestore)从 Firestore 获取附近的查询/餐厅