网上有很多关于如何从零开始一步步搭建vscode的C++环境的教程文章,本文就不重复流程了,更多的是记录一些细节要点,主要是配置文件的写法,也作为我学习过程中的笔记备忘。
.vscode文件夹
在顶层目录新建,子目录都生效。开发C++时,文件夹中需要包含3个文件:
- 任务配置 task.json
- 运行配置 lauch.json
- C++开发配置 c_cpp_properties.json
task.json文件
task描述了需要调用什么命令来执行任务,相当于直接在命令行cmd中执行命令。对应到c++开发,就是程序构建的过程。
需要关注的项有:
- "label"项:这是此任务的名称,会被`lanch.json`中的`preLaunchTask`所使用。
- "command"项:这是执行的命令,如果时C++开发,就是`g++`,`gcc`这些构建命令,注意,这些命令需要添加到系统的环境变量中。
- "args"项:执行命令时的输入参数,g++一般就采用默认的。
- "presentation"项:默认生成的json这个项是没有的,当每次运行时出现"终端将会被重用"的消息时,就手动加上这项,并设置这里边的"panel"项等于 "new"就可以去掉这个消息了。(这项指每个进程创建新的端口,默认是shared表示共享,则在编译其他工程时会出现"终端将会被重用"的消息)
以下是一个完整的task.json,可直接复制使用。
//task.json
{
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?LinkId=733558
"version": "2.0.0",
"tasks": [{
"label": "my_g++",//任务的名称,lanch.json中的preLaunchTask所使用。
"command": "g++",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe"
],
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
},
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "new", //这里shared表示共享,改成new之后每个进程创建新的端口
"showReuseMessage": true,
"clear": true
}
}
]
}
lauch.json
lanch配置了运行的过程,包括描述了需要执行的任务。对应C++开发就是运行与调试。
需要关注的项有:
- "miDebuggerPath"项,指定gdb,这里的路径需修改为自己本机的gdb路径。
- "preLaunchTask"项,指定运行前要执行的任务,填写task.json文件里面的任务名(label项)。
以下是一个完整的lauch.json,可直接复制使用。
//lauch.json
{
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径.${workspaceRoot}/${fileBasenameNoExtension}.exe
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
"cwd": "${workspaceRoot}", // 调试程序时的工作目录,一般为${workspaceRoot}即代码所在目录
"environment": [],
"externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"MIMode": "gdb",
"miDebuggerPath": "F:\\minGW\\v7.2.0\\mingw64\\bin\\gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应
"preLaunchTask": "my_g++", // 调试会话开始前执行的任务,一般为编译程序。值是task.json里面label项定义的值。
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
c_cpp_properties.json
这个json配置了关于C++的参数。
需要关注的项有:
- "compilerPath"项,这个是指定编译器路径。可能你会说,前面不是已经在task中指定了命令g++了吗。这里的这项是为intelligence智能提示服务的,如果这项不设置,靠前面两个json配置是可以编译运行的。但是在代码输入界面是不能解析相关C++符号的,比如`#include<iostream>`,就会有虚线,提示找不到文件iostream。
- "includePath"项,头文件包含目录。
以下是一个完整的c_cpp_properties.json,可直接复制使用。
//c_cpp_properties.json
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "F:\\minGW\\v7.2.0\\mingw64\\bin\\gcc.exe",
"cStandard": "gnu11",
"cppStandard": "gnu++14",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
❤️欢迎关注+点赞+收藏+评论+转发❤️,原创不易,鼓励笔者创作更好的文章~
相关阅读:
一尾66:画个球啊(上)——纯C语言绘制圆球 一尾66:《程序员的自我修养》——全书思维导图(上) 最让程序员自豪的事情是什么?