有其他文章参考,待补充
推荐插件
C/C++(编译器)
Code Runner(编译调试工具)
C++ Intellisense(自动补全)
Visual Studio IntelliCode(重构,检查)
通用配置文件
launch.json
负责调动可执行文件,进行文件运行或者文件调试。
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "gdb",
"preLaunchTask": "compile",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
},
]
}
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "compile",
"command": "/usr/bin/g++-5",
"args": [
"-g",
"-std=c++11",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "调试器生成的任务。"
}
]
}
负责组织文件进行编译,生成可执行文件。其作用可以类比Makefile文件或qt的pro文件,因此编译选项和编译工具的选择都在此处进行。
主要的坑在于,当前系统中是否有多个g++编译器,如果只有一个,则只需把command选项配置为"command": “g++”,如果存在多个,则需要类似"command": "/usr/bin/g+±5"把编译器路径和名称写对,查看编译器版本方法如下:
sudo update-alternatives --query g++
可以得到如下的结果。
freja@freja-virtual-machine:~$ sudo update-alternatives --query g++
Name: g++
Link: /usr/bin/g++
Status: manual
Best: /usr/bin/g++-5
Value: /usr/bin/g++-5
Alternative: /usr/bin/g++-5
Priority: 60
Alternative: /usr/local/bin/g++
Priority: 50
从上述结果可以看到/usr/bin/g+±5的优先级数为60,大于/usr/local/bin/g++的优先级数50,因此当前系统默认编译器为/usr/bin/g+±5。
如果在command中指定的编译器与系统默认编译器不同则会出现可以编译运行,但是没有办法在断点处停下(命中断点,单步调试)。因此保持command的编译器与系统编译器一致是命中断点的关键。
除此之外,调试也是需要在编译选项args上增加-g,-g是进行调试的基本选项
如果需要用到c++11的特性需要在编译选项上增加-std=c++11,以此类推可以得到c++14或者c++17的特性。
"args": [
"-g",
"-std=c++11",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
args最后一个参数为目标文件名,为了可以和launch.json文件配套使用,请务必保证tasks.json的args的最后一个参数和launch.json的program参数保持一致。
fileBasenameNoExtension为目标文件去掉后缀的名字。
fileDirname为当前文件所在文件夹的地址
${fileDirname}/${fileBasenameNoExtension}
的组合可以使得生成的目标文件名与main函数的所在文件的名字一致(无后缀)
单文件:"${file}",
多文件:"*.cpp",
"args": [
"-g",
"-std=c++11",
"*.cpp",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
PS:关于多版本g++安装和版本选择请参考我的另一篇文章。
g++11编译安装