VScode C/C++环境配置
1、环境准备
C/C++的程序源代码, 经过预处理 --> 编译 --> 汇编 --> 链接 最后得到我们的可执行文件, 这里我们环境需要一个编译器, 这里用的是 GCC, 下载地址为: MinGW-w64下载地址 , 下载解压之后将bin的路径加入环境变量中, 这里的操作可以查看其他文章.
验证是否安装成功, win + r 输入 cmd, 输入 gcc -v, 查看信息即可。
2、安装 C/C++ 插件
下载这个即可
3、vscode的配置环境
一般我们先创建一个工作区目录, 在这个目录下面创建一个.vscode文件夹(注意名字一定是.vscode),这是必须的(一般来说,每个文件夹中都会有这么一个.vscode配置文件)。注意:将此文件夹放在常用文件夹顶层,就不需要重复配置了。 一般常见的目录如下所示
在.vscode文件夹中,新建两个(只需两个)配置文件,即launch.json、tasks.json。在当前文件是C++的情况下,tasks可以被用来做编译,而launch用来执行编译好的文件。
支持下面的预定义变量:
-
${workspaceFolder} - 当前工作目录(根目录)
-
${workspaceFolderBasename} - 当前文件的父目录
-
${file} - 当前打开的文件名(完整路径)
-
${relativeFile} - 当前根目录到当前打开文件的相对路径(包括文件名)
-
${relativeFileDirname} - 当前根目录到当前打开文件的相对路径(不包括文件名)
-
${fileBasename} - 当前打开的文件名(包括扩展名)
-
${fileBasenameNoExtension} - 当前打开的文件名(不包括扩展名)
-
${fileDirname} - 当前打开文件的目录
-
${fileExtname} - 当前打开文件的扩展名
-
${cwd} - 启动时task工作的目录
-
${lineNumber} - 当前激活文件所选行
-
${selectedText} - 当前激活文件中所选择的文本
-
${execPath} - vscode执行文件所在的目录
-
${defaultBuildTask} - 默认编译任务(build task)的名字
以上图的文件结构来配置这两个文件的一个具体例子
// tasks.json 文件
{
"version": "2.0.0",
"tasks": [ // 这里可以放置多个任务, 这里只写了一个
{ // 第一个任务的起始括号
"label": "g++", // 任务的名称, 在launch.json文件中"preLaunchTask" 指定的任务名
"command": "g++", // 命令, 即命令行中的命令, 由于我们这个任务是要实现编译cpp,同时我们编译器使用的是g++, 故命令为g++
"args": [ // commmand 命令带的参数, 熟悉g++编译指令的应该都懂
"-g", // 生成调试信息
"-std=c++11", // 使用C++11 标准 进行编译
"${fileDirname}/*.cpp", // 指定进行编译的源文件,这里指定了当前执行编译的cpp文件所在目录下的所有cpp文件
"-o", // -o 接 最终可执行文件生成的位置
"${workspaceFolder}/output/${fileBasenameNoExtension}.exe", // .exe文件的位置
"-I", // -I 后续接头文件路径
"headfile" // 头文件所在目录
],
// 所以以上部分,就是在shell中执行(假设文件名为main.cpp)
// g++ src/main.cpp src/test.cpp -g -o output/main.exe -I headfile
"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
}
}
]
}
// launch.json 文件
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示 随便填
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"program": "${workspaceFolder}/output/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
"args": [], // 程序调试时传递给程序的命令行参数,根据程序需要填写
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
"cwd": "${workspaceFolder}",// 调试程序时的工作目录,一般为工程的根目录
"environment": [], // 环境变量, 为空即可, 使用系统环境变量
"externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"MIMode": "gdb", // 指定连接的调试器
"miDebuggerPath": "D:\\MinGW\\mingw64\\bin\\gdb.exe",// miDebugger的路径,注意这里要与MinGw的路径对应
"preLaunchTask": "g++", // 调试会话开始前执行的任务,一般为编译程序,名称与tasks.json的label设置的名字对应
// 模板自带,好像可以更好地显示STL容器的内容
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
根据需求进行修改的参数
(1) “program” 参数 设置调试程序的路径
该路径的设置取决于我们最好将我们编译链接得到的可执行文件放在哪里, 以这个例子为例我们将其放到了output的文件夹.
"program": "${workspaceFolder}/output/${fileBasenameNoExtension}.exe"
在这里使用了预定义变量, ${workspaceFolder} 表示的是当前工作目录(根目录), 在这个具体的例子中即test目录, 然后test目录下的一个文件, 文件名字为 ${fileBasenameNoExtension} 即当前打开的文件名, 例如我们最后是在main.cpp这个文件运行的, 那么这个 “program” 参数即为 test/output/main.exe; 这个根据自己的文件结构可以进行修改设置.
(2) “MIMode” 参数 和 “miDebuggerPath”
"MIMode"参数的设置取决于使用的连接器, 一般有gdb 和 lldb, “miDebuggerPath” 为你调试器的具体路径, 如果是以非调试模式运行的, 这两个参数可以不设置.
(3) “preLaunchTask” 预任务
即执行程序之前,最先执行的一个任务, 这里一般为编译任务, 若这里不设置, 则直接去启动.exe, 若此时时"program"的参数设置中并没有这样一个文件则会报错. 这个参数设置为 tasks.json下 tasks 参数中其中一个任务的 label 参数, 例如我们此时的tasks.json下 tasks 只有一个任务, 其中"label": “g++”, 那么我们的"preLaunchTask" 参数即可设置为 “g++”
4、智能补全设置
使用VScode,我们都会碰到一个问题,就是在编写C和C++源文件时,头文件提示未配置好等错误。关于这个问题,给出方案如下:我想大家碰到的最多的问题就是"includepath"的设置问题,这里我们需要使用c_cpp_properties.json这个文件来指明我们的头文件路径,
// c_cpp_properties.json 文件
{
"configurations": [
{
"name": "win",
"includePath": [
"${workspaceFolder}/**", // 指明了include路径在根目录下
],
"defines": [],
"compilerPath": "D:/MinGW/mingw64/bin/g++.exe", // 编译器的路径, 根据需求修改
"cStandard": "c11", // 指明C编译标准
"cppStandard": "c++17", // 指明C++编译标准
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}
这里以Opencv的头文件更好说明
{
"configurations": [
{
"name": "win",
"includePath": [
"${workspaceFolder}/**",
"D:/opencv/opencv/build/include",
"D:/opencv/opencv/build/include\\opencv2" // 根据自己opencv所在地方填写
],
"defines": [],
"compilerPath": "D:/MinGW/mingw64/bin/g++.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}