特别感谢该视频:https://www.bilibili.com/video/BV1fy4y1b7TC?spm_id_from=333.999.0.0
1 VScode安装
1)安装VScode
官网下载VScode版本对应ubuntu版本
使用指令安装:sudo dpkg -i code_1.37.0-1565227985_amd64.deb
使用指令打开:code .
,打开当前文件夹
参考:https://blog.csdn.net/shuiyixin/article/details/98970992
补充:VScode不能输入中文解决
解决方法:vscode有好几种安装方法,有通过应用商店直接安装的,也有通过命令安装的,其中有些安装方法比如应用商店安装的是vscode的阉割版,造成无法输入汉字
2)卸载VScode
https://blog.csdn.net/weixin_30878051/article/details/116770347
sudo apt-get --purge remove code
3)VScode安装扩展:
C/C++、C/C++ Extension package、CMake、CMake Tools
2 demo
1)目录结构及相关文件内容
./main.cpp
#include"swap.h"
using namespace std;
int main(int argc, char** argv)
{
int a = 10, b =5;
cout<<"a: "<<a<<", b: "<<b<<endl;
swap(a, b);
cout<<"a: "<<a<<", b: "<<b<<endl;
return 0;
}
./src/swap.cpp
#include"swap.h"
int swap(int& a, int& b)
{
int tmp = a;
a = b;
b = tmp;
}
./include/swap.h
#pragma once
#include<iostream>
int swap(int& a, int& b);
2)编译
./CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(demo)
set(CMAKE_BUILD_TYPE Debug) # release
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -o2 -g") # -g and 02 are conflict
include_directories(include)
add_executable(swap_demo main.cpp src/swap.cpp)
外部构建,mkdir build
cd build
cmake …
make
最后生成 swap_demo
执行:./swap_demo
a: 10, b: 5
a: 5, b: 10
3)VScode Debug模式
首先要保证CMakeLists.txt里面设置为Debug模式(Debug或者-g编译)。
其次生成launch.json文件。按Run and Debug按钮(或者按该快捷键ctrl+shift+D),点击create a launch.json file,选择C++(GDB/LLDB) - default ***, 创建一个launch.json文件,文件内容可以如下:
launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/main_cmake", //!!!!!!!!!!!!可执行文件的绝对路径
"args": [], // 对应可执行文件带的参数
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "Build" //!!!!!!!!!!!!指定task.json中的"label":"Build"的任务
}
]
}
注意两个地方:
“program”:填cmake-make对应生成的可执行文件的地址+名称,其中${workspaceFolder}就是当前工程的root目录,一般CMakeLists.txt文件也放在该目录下。
“preLaunchTask”:填写task.json中的"label",比如此处填写的是"Build",就要在task.json里面去找对应的"Build"任务。
此时若注释掉"preLaunchTask"该语句,也能进行debug,但是修改的代码内容不能实时的进行编译,仍然是执行上次的,需要手动make,比较麻烦,增加该语句就能解决,修改后重新运行就同时执行了编译的工作。
最后,生成task.json文件。在菜单栏点击Terminal - Configure Default Build Task - create task.json … - Others,生成task.json文件,修改内容如下:
tasks.json
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"options": {
"cwd": "${workspaceFolder}/build" //进入到build的文件夹的绝对路径中,cwd相对于cd
},
"tasks": [
{
"label": "cmake",
"type": "shell",
"command": "cmake",
"args": [
".."
]
},
{
"label": "make",
"group": {
"kind": "build",
"isDefault": true
},
"command": "make", // 这个是windows下面mingw32-make
"args": [
]
},
{
"label": "Build", // 这个task的任务是,调用前两个label,第一个是cmake..,第二个是make
"dependsOrder": "sequence", //按列出的顺序执行任务依赖项
"dependsOn":[
"cmake",
"make"
],
}
]
}
注意:一共有三个label:cmake, make, Build。其中Build与launch.json中“prelaunchTask”的对应,Build又由cmake和make两个组成。task.json文件可以这样理解,到cwd目录下,根据launch.json指定“prelaunchTask”的label(Build)下,按照该label(Build)中定义的顺序去执行cmake和make。
此时增加该文件后,每次执行以下文件,都会重新cmake和make。
其中,options不能少。
常见报错:
1)launch.json在debug按钮下无法创建。
2)task.json在菜单栏terminal下没有configure Default and build task按钮。
重启虚拟机