在type为 cppbuild的 tasks.json中,工作区变量对command字段的取值不起作用
在VS Code tasks.json 并安装了C/C++构建工具扩展时,工作区变量如 ${config:aga} 或 ${global} 会在 args 数组项中被替换为它们的值,前提是 type 键为 cppbuild,且不是 shell。
但此类变量不会在 command 键中被替换,因此如果存在:
"command":"firstText ${variable} thirdText"
其中 ${variable} 等于 secondText,VS Code将字面执行 firstText ${variable} thirdText 命令,而不是 firstText secondText thirdText。
这会在 tasks.json 中的 type 键被设置为 cppbuild 时发生。如果我把 type 设置为 shell,则 command 中的变量会被替换。
变量能在 "type":"cppbuild" 中工作吗?
不起作用的 tasks.json 示例:
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: cl.exe build active file",
// does not replaced
"command": "\"C:/Program Files (x86)/Microsoft Visual Studio/18/BuildTools/VC/Tools/MSVC/14.50.35717/bin/Hostx64/${config:arch}/cl.exe\"",
// replaced
"args": [
"/Zi",
"/EHsc",
"/nologo",
"/Fe${fileDirname}\\${fileBasenameNoExtension}.exe",
"${file}",
"/link /LIBPATH:\\\"C:/Program Files (x86)/Microsoft Visual Studio/18/BuildTools/VC/Tools/MSVC/14.50.35717/lib/${config:arch}\\\" /LIBPATH:\\\"C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/um/${config:arch}\\\" kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib Uuid.lib odbc32.lib odbccp32.lib /LIBPATH:\\\"C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/ucrt/${config:arch}\\\"",
"/SUBSYSTEM:WINDOWS",
"/ENTRY:mainCRTStartup"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$msCompile"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}
解决方案
当前的变通做法是将实际的 command 移到 arguments 数组中(因为对于参数,变量会被替换,正如我所写的):
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: cl.exe build active file",
"command": "",
"args": [
"\"C:/Program Files (x86)/Microsoft Visual Studio/18/BuildTools/VC/Tools/MSVC/14.50.35717/bin/Hostx64/${config:arch}/cl.exe\"",
"/Zi",
"/EHsc",
"/nologo",
"/Fe${fileDirname}\\${fileBasenameNoExtension}.exe",
"${file}",
"/link /LIBPATH:\\\"C:/Program Files (x86)/Microsoft Visual Studio/18/BuildTools/VC/Tools/MSVC/14.50.35717/lib/${config:arch}\\\" /LIBPATH:\\\"C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/um/${config:arch}\\\" kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib Uuid.lib odbc32.lib odbccp32.lib /LIBPATH:\\\"C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/ucrt/${config:arch}\\\"",
"/SUBSYSTEM:WINDOWS",
"/ENTRY:mainCRTStartup"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$msCompile"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}
工作区变量 ${config:variableName} 来自项目中 .vscode 文件夹内的 settings.json 文件。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。