C++ 如何编译和运行c++;VisualStudio代码中的源文件
我一直在寻找这个问题的答案,但似乎找不到答案。我知道我们可以使用task.json文件来自动化构建过程。但是我想使用VisualStudio代码来实现C++中的竞争编程算法。我希望能够编译一个程序,并在没有任何错误的情况下一次性运行它。如果有错误,我希望显示它们 另外,VisualStudio代码附带了一个集成终端,因此如果程序输出可以重定向到那里,那就太好了。 另外,我们如何映射键盘快捷键来运行此任务 我正在Windows 10上使用Visual Studio代码2019和MinGW G++编译器 编辑 我在下面尝试了Escape0707的答案,并尝试使用默认键绑定C++ 如何编译和运行c++;VisualStudio代码中的源文件,c++,visual-studio-code,C++,Visual Studio Code,我一直在寻找这个问题的答案,但似乎找不到答案。我知道我们可以使用task.json文件来自动化构建过程。但是我想使用VisualStudio代码来实现C++中的竞争编程算法。我希望能够编译一个程序,并在没有任何错误的情况下一次性运行它。如果有错误,我希望显示它们 另外,VisualStudio代码附带了一个集成终端,因此如果程序输出可以重定向到那里,那就太好了。 另外,我们如何映射键盘快捷键来运行此任务 我正在Windows 10上使用Visual Studio代码2019和MinGW G++编
Ctrl+Alt+N
执行“运行代码”
,但我遇到了这个错误
更新的方法,该方法结合了make
和vscode-cpptools
调试:
如果您不关心VSCode集成调试工具,它将为您提供设置断点、在运行时更改变量值、检查变量值等功能,并且您想要一种更简单、更快、透明的方式来调用好的旧命令行工具,跳过此部分并签出下面的code Runner
默认配置是用VSCODE C++扩展的,对于低端机器来说是慢的。最糟糕的是,它们总是会重建您的可执行文件,并且。下面是Linux(当然还有远程WSL)的解决方案
要解决第一个问题,您需要设置make
(对于简单的一个源文件编译,您只需要安装make)来构建源代码,并在tasks.json
中设置构建任务。要解决第二个问题,请创建另一个任务,以便在第一个任务完成后运行生成的可执行文件:
使用Intellisense了解配置中的每个属性
tasks.json
{
//看https://go.microsoft.com/fwlink/?LinkId=733558
//有关tasks.json格式的文档
“版本”:“2.0.0”,
“介绍”:{
“清楚”:正确,
“聚焦”:没错,
“面板”:“共享”
},
“任务”:[
{
“标签”:“创建活动文件”,
“类型”:“外壳”,
“命令”:“制作”,
“args”:[“${fileBasenameNoExtension}.out”],
“problemMatcher”:“$gcc”,
“集团”:{
“种类”:“建造”,
“isDefault”:正确
}
},
{
“标签”:“在不调试的情况下运行活动文件可执行文件”,
“类型”:“外壳”,
“命令”:“${fileDirname}/${fileBasenameNoExtension}.out”,
“介绍”:{
“清除”:错误
}
},
{
“标签”:“在不调试的情况下生成并运行活动文件”,
“集团”:{
“种类”:“测试”,
“isDefault”:正确
},
“dependsOn”:[
“创建活动文件”,
“运行活动文件可执行文件而不进行调试”
],
“dependsOrder”:“序列”
}
]
}
要以这种方式启用使用VSCode的调试,首先确保在Makefile
中向cxflags
添加了-g
编译标志
有关如何编写Makefile
的快速信息,请参阅、或。或者检查答案的最后一部分
然后,创建以下launch.json
:
launch.json
{
//使用IntelliSense了解可能的属性。
//悬停以查看现有属性的描述。
//有关更多信息,请访问:https://go.microsoft.com/fwlink/?linkid=830387
“版本”:“0.2.0”,
“配置”:[
{
“名称”:“生成并调试活动文件”,
“类型”:“cppdbg”,
“请求”:“启动”,
“程序”:“${fileDirname}/${fileBasenameNoExtension}.out”,
“cwd”:“${workspaceFolder}”,
“设置命令”:[
{
“说明”:“为gdb启用漂亮打印”,
“文本”:”-启用漂亮打印“,
“忽略失败”:正确
}
],
“预启动任务”:“${defaultBuildTask}”
}
]
}
现在,您可以使用命令调色板尝试任务:运行生成任务
,任务:运行测试任务
,调试:开始调试
原始答案
请考虑一下,因为它似乎比VSCode的内置调试程序更快(对于我来说),可以用于许多小型C++代码文件的练习。我将描述如何使用该扩展来满足类似的需求
路径
配置为包含clang++
,以便可以从集成终端调用它。
您也可以使用g++
将下面的clang++
替换为g++
。我更喜欢<代码> CLAN++<代码>,因为它对像我这样的C++初学者提供了更严格的检查。
“代码运行程序.clearPreviousOutput”:true,
“code runner.preserveFocus”:false,
“code runner.runinternal”:true,
“代码运行程序.saveFileBeforeRun”:true
code runner.executomap
添加到用户/工作区设置,该设置描述当当前文件名的扩展名满足指定的扩展名时,您希望扩展名发送到终端的命令。例如:
“代码运行程序.executomap”:{
“cpp”:“\b\b\b\b\b\b\b\b\bclang++-std=c++17$fileName-o a.out&&./a.out”
},
上面的设置告诉扩展名,“当看到.cpp
文件时,向终端发送10个退格(以删除任何键入错误的字符),并调用clang++-std=c++17*文件名*-o a.out&&./a.out
。
我在Linux机器上使用此命令,对于Windows,请尝试将输出文件的文件扩展名更改为.exe
,并使用\a.exe
o调用它
CXX = clang++
CXXFLAGS = -std=c++17 -g -Weverything -Werror
%.out: %.cpp
$(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@
{
"version": "2.0.0",
"tasks": [
{
"label": "build & run", //It's name of the task , you can have several tasks
"type": "shell", //type can be either 'shell' or 'process' , more details will be given below
"command": "g++",
"args": [
"-g", //gnu debugging flag , only necessary if you want to perform debugging on file
"${file}", //${file} gives full path of the file
"-o",
"${workspaceFolder}\\${fileBasenameNoExtension}", //output file name
"&&", //to join building and running of the file
"${workspaceFolder}\\${fileBasenameNoExtension}"
],
"group": {
"kind": "build", //defines to which group the task belongs
"isDefault": true
},
"presentation": {
"echo": false,
"reveal": "always",
"focus": true,
"panel": "shared",
"clear": false,
"showReuseMessage": false
},
"problemMatcher": "$gcc"
},
]
}