gpt4 book ai didi

c++ - 为什么在Visual Studio Code中将 “C/C++:”插入我的task.json文件的标签中?

转载 作者:行者123 更新时间:2023-12-02 10:18:05 25 4
gpt4 key购买 nike

我正在将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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com