VScode编译C++程序
本篇文章默认电脑已经安装好VScode软件,下面来简单叙述一下如何使用VScode做C++的代码编写、编译以及调试等工作。
配置C++环境
- 在vscode中下载C/C++插件
- 下载编译器
vscode只是一个编辑器,本身并不具备代码编译功能,此处下载的是mingw-w64。 - 添加 Mingw-w64的bin文件夹到电脑环境变量中
- 检查MinGW是否安装成功
打开电脑的cmd,输入下列两行命令
g++ --version
gdb --versionc
成功显示当前安装的编译器版本则成功添加环境变量
如果显示不能识别命令,则未成功安装,需要检查是否成功添加环境变量。
- 简单的编写一个cpp程序,接下来生成.vscode配置文件
- 生成tasks.json文件
选择终端——配置默认生成任务(Terminal > Configure Default Build Task),在下拉列表中选择g++.exe build active file(这一步是选择编译时使用的编译器,由于使用的是MinGW,所以选择该编译器),选择完毕后,将自动生成.vscode文件夹,在文件夹中会自动生成tasks.json文件,文件中具体命令注释:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: g++.exe build active file",//任务名称,与launch.json的preLaunchTask相对应
"command": "C:\\MinGW-w64\\mingw64\\bin\\g++.exe",//使用的编译器
"args": [
"-g",
"${file}",
"-o",//指定输出文件名,不加参数默认为a.exe,Linux下默认为a.out
"${fileDirname}\\${fileBasenameNoExtension}.exe" //当前文件名(去掉拓展名)
],
"options": {
"cwd": "C:\\MinGW-w64\\mingw64\\bin"
},
"problemMatcher": [
"$gcc" //使用gcc捕获错误
],
"group": {
"kind": "build",
"isDefault": true
}
},
]
}
命令设置指定要运行的程序; 在这种情况下是g++。 args数组指定将传递给g++的命令行参数。 必须按照编译器期望的顺序指定这些参数。 此任务告诉g++获取活动文件($ {file}),对其进行编译,然后在当前目录($ {fileDirname})中创建一个与活动文件同名但扩展名为.exe($)的可执行文件。{fileBasenameNoExtension} .exe。
标签值(label)是您将在任务列表(tasks)中看到的内容;你可以随便给它取什么名字。
group对象中的“isDefault”:true值指定当您按Ctrl+Shift+B时将运行此任务。此属性仅为方便使用;如果将其设置为false,仍然可以从带有Tasks: run Build Task的终端菜单中运行它。
- 编译生成可执行文件,快捷键为(Ctrl + Shift + B)
没有提示错误则生成成功,点击新建终端,输入dir可显示当前文件夹中的文件,会多出一个可执行文件(.exe)
继续输入.\main.exe就可执行文件(文件名由生成的任务决定) - 对程序进行Debug
按F5,从菜单中选择C++(GDB/LLDB),接着选择g++.exe build and debug active file命令,vscode会自动在.vscode文件夹生成launch.json文件,文件具体命令注释:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - 生成和调试活动文件", //配置名称,将会在启动配置的下拉菜单显示
"type": "cppdbg",//配置类型,cppdbg对应cpptools提供的调试功能,可以认为此处只能是cppdbg
"request": "launch",//请求配置类型,可以为launch(启动)或attach(附加)
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",//将要进行调试的程序的路径
"args": [],//程序调试时传递给程序的命令行参数
"stopAtEntry": true,//设为true时程序将暂停在程序入口处,相当于在main上打断点
"cwd": "${workspaceFolder}",//调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
"environment": [],//环境变量
"externalConsole": false,//为true时使用单独的cmd窗口,与其他IDE一致;18年10月后设为false可调用VSC内置终端
"MIMode": "gdb",//指定连接的调试器,可以为gdb或lldb
"miDebuggerPath": "C:\\MinGW-w64\\mingw64\\bin\\gdb.exe",//调试器路径,Windows下后缀不能省略,Linux下不需要
"setupCommands": [
{
//模板自带
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++.exe build active file"//调试会话开始前执行的任务,一般为编译程序,与tasks.json的label相对应
}
]
}
program指定需要调试的程序,在这里,它被设置为活动文件文件夹$ {fileDirname}和扩展名为.exe的活动文件名(${fileBasenameNoExtension}.exe)。
默认情况下,C ++扩展不会在源代码中添加任何断点,stopAtEntry值设置为false。 将stopAtEntry值更改为true,以使调试器在启动调试时在main函数上停止。
- C/C++配置文件
如果想要控制C/C++拓展,可以创建c_cpp_properties.json文件,它将允许更改设置,例如编译器的路径,包含路径,C ++标准(默认为C ++ 17)等
可以从命令面板(Ctrl + Shift + P)编辑配置(UI)(C/C++: Edit Configurations (UI))来查看C / C ++配置UI,.vscode文件夹中将会自动生成c_cpp_properties.json文件。
{
"configurations": [
{
"name": "Win32",
"includePath": ["${workspaceFolder}/**"],
"defines": ["_DEBUG", "UNICODE", "_UNICODE"],
"compilerPath": "C:\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-rev0\\mingw32\\bin\\gcc.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x86"
}
],
"version": 4
}
仅当程序包含不在工作空间(当前文件夹)或标准库路径中的头文件时,才需要添加到“Include path”设置中。
editorPath是配置中的重要设置。 该扩展使用它来推断C ++标准库头文件的路径。 当扩展知道在哪里可以找到那些文件时,它可以提供有用的功能,例如智能补全和“转到定义”导航。
使用vscode进行C++多文件的编译
用Vscode编译小的Cpp项目(包含多个文件)时,需要对tasks.json进行修改。
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "shell: g++.exe build active file",
"command": "C:\\MinGW-w64\\mingw64\\bin\\g++.exe",
"args": [
"-g",
"${fileDirname}\\*.cpp" , //多文件编译时使用此命令
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "C:\\MinGW-w64\\mingw64\\bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
args中的{fileDirname}\\*.cpp参数表示对当前文件中的所有cpp文件进行编译,则整个文件夹为一个工作区,只有一个main主函数,{file}只对当前单个文件进行编译,文件夹中可以有多个main函数。