我正在将Visual Studio Code与MinGW-w64一起使用。这涉及创建两个文件(launch.json和tasks.json),这些文件使我可以构建和调试C++代码。我通过转到终端->配置默认生成任务...,然后选择“C / C++:g++。exe生成 Activity 文件”来选择我的task.json文件。
通常,tasks.json文件显示如下:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "g++.exe build active file",
"command": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build"
}
]
}
但是,在最近几天中,它显示如下:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: g++.exe build active file",
"command": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build"
}
]
}
当文件采用这种格式时,我将无法调试代码。相反,我收到消息“找不到任务'g++。exe构建 Activity 文件”。
唯一明显的区别是
C/C++
现在在g++.exe build active file
行中的"label"
之前。删除此标签后,便可以获取代码进行编译和/或调试。这导致我问两个问题:首先,为什么在标签中插入了
C/C++
?它没有出现在用于使用Visual Studio代码设置MinGW的Microsoft文档中:https://code.visualstudio.com/docs/cpp/config-mingw其次,如何才能从标签中永久删除
C/C++
,这样就不必每次都手动删除它了?我已经尝试在下拉菜单的“配置默认生成任务”中选择C / C++:g++。exe生成 Activity 文件旁边的“配置任务”;删除C/C++
,然后保存task.json文件,但这似乎不会导致构建任务永久更改。一如既往地感谢您的帮助。
最佳答案
我花了一些时间阅读cpptools扩展的源代码,然后发现了一些问题。在不同条件下,扩展名具有不同的响应
如果文件夹根目录中存在“.vscode”文件夹,则在添加调试配置时,它将仅指导创建launch.json。需要指导用户再次配置“tasks.json”。但是名称此时创建的任务的值与“preLaunchTask”的值不一致。这是此扩展程序的问题。我认为原因是初始化调试配置时未找到“.vscode”文件夹,执行扩展的代码时缺少某些条件
如果文件夹的根目录中有一个空的“.vscode”文件夹,则在初始化调试配置时将同时创建“launch.json”和“tasks.json”。这两个文件完全匹配并执行不需要任何修改
如果用户首先配置任务,则在初始化调试配置时,扩展将重新创建一个名为“g++。exe构建 Activity 文件”的任务,该任务不是以“C / C++”开头的。这当然有效,但是您可能需要删除开始时未使用的任务
这种设计是合理的,因为“C / C++:g++。exe构建 Activity 文件”实际上是cpptools中内置的任务模板(还有两个)。内置模板可以由“preLaunchTask”引用,但用户无法在“tasks.json”中看到它们
如果删除文件“tasks.json”并将“preLaunchTask”的值更改为“C:C++:g++。exe构建 Activity 文件”。它也可以使用,但这不是标准用法
关于c++ - 为什么在Visual Studio Code中将 “C/C++:”插入我的task.json文件的标签中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61281945/