vscode下cmake工程环境配置以及调试配置(c++)

1.准备工作

1.1MinGW的下载

MinGW将其托管到sourceforge上了,也可以前往sourceforge下载:https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-posix/seh/?tdsourcetag=s_pctim_aiomsg

链接:https://pan.baidu.com/s/17QB1_ILBtAMf9Da1oTxT-A
提取码:2k6l
vscode下cmake工程环境配置以及调试配置(c++)_第1张图片
Version 指的是 gcc 的版本,如果没有特殊的需求,一般选择最高的版本号即可。
操作:在这个版本中,最高版本是 6.2.0 ,选中它即可。
vscode下cmake工程环境配置以及调试配置(c++)_第2张图片
Architecture 是指电脑系统是 32位 还是 64位,根据你的电脑系统做出对应选择。
操作:我的电脑系统是 64位 的,所以我选择了 x86_64,如果你是 32位 系统,则选择 i686 即可。
vscode下cmake工程环境配置以及调试配置(c++)_第3张图片
这个世界上只有两种操作系统,符合 posix 协议的,和 Windows 。如这个笑话所说的,如果你想要开发 Windows 程序,需要选择 win32 ,而开发 Linux、Unix、Mac OS 等其他操作系统下的程序,则需要选择 posix 。
vscode下cmake工程环境配置以及调试配置(c++)_第4张图片
异常处理在开发中非常重要,你在开发的过程中,大部分的时间会耗在处理各种异常情况上。如果你之前选择了 64位,则这里有两个异常处理模型供你选择,seh 是新发明的,而 sjlj 则是古老的。seh 性能比较好,但不支持 32位。 sjlj 稳定性好,支持 32位。
vscode下cmake工程环境配置以及调试配置(c++)_第5张图片
选择了 32位 后,则可以用 dwarf 和 sjlj 两种异常处理模型。同样的,dwarf 的性能要优于 sjlj ,可以它不支持 64位 。建议选择 dwarf 。

Build revision 默认就好.

1.2CMake的下载

网盘链接:https://pan.baidu.com/s/1_8CUg-0ckmGM-UWWNE8tYg
提取码:1kp6
CMake官网下载:下载导航->
在这里插入图片描述
MinGW 和 CMake下载完后需要配置系统环境变量,将MinGW和CMake下的bin目录添加进去即可,在cmd下输入 g++ --versioncmake --version有版本号输出说明MinGW ,CMake安装成功。

在vscode中安装插件, 下图所示都安装了吧

vscode下cmake工程环境配置以及调试配置(c++)_第6张图片

2 工程配置

2.1 新建一个总工程文件夹,并按下图建立多个文件夹

  1. 新建一个文件夹Cmake_test,用vscode打开
  2. 在文件夹下新建 .vscode 文件夹 和 source 文件夹,.vscode下存放配置文件,source下存放头文件和源文件,
  3. 在根目录下新建 CMakeLists.txt文件
    完成后 如图所示
    vscode下cmake工程环境配置以及调试配置(c++)_第7张图片

2.2 代码编写

先编写main.cpp 和swap.cpp
main.cpp其中代码为:

//main.cpp
#include
#include "Lib/swap.h"
using namespace std;

int main(int argc, char **argv)
{
   int v1 = 100;
   int v2 = 200;
   cout << "Before:" << v1 << " " << v2 << endl;
   swap(v1,v2);
   cout << "After:" << v1 << ' ' << v2 << endl;
   cout << "cmake调试\n";
   system("pause");
   return 0;
}

swap.hswap.cpp 的代码为:

void swap(int &a, int &b);
#include "swap.h"

void swap(int &a, int &b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}

CMakeLists.txt 的代码为:

cmake_minimum_required (VERSION 2.8.12)#规定cmake的最低版本要求
project(MySwap)#项目的名称,不一定和你的文件夹名称一样
set(CMAKE_BUILD_TYPE "Debug") #打断点调试代码必设置,Cmake默认是Release会导致断点失效
include_directories(${PROJECT_SOURCE_DIR}/source/Lib)#添加头文件的搜索路径
#要用的cpp文件有哪些地址就要添加源文件路径
aux_source_directory(./source SrcFiles)#将源文件列表写在变量SrcFiles中
aux_source_directory(./source/Lib SrcFiles)#工程项目较大,要创建多个模块
set(EXECUTABLE_OUTPUT_PATH  ${PROJECT_SOURCE_DIR}/build)#设置可执行文件输出路径
add_executable(main ${SrcFiles})#设置可执行文件的名称,make之后build目录下出现main.exe

2.3 编译,执行

2.3.1 懒人方法1

在cmake编译之前,先使用之前下载的MinGW配置一些cmake环境。安装好cmake后左边会有如图所示图标。
在这里插入图片描述
配置好后,发现会生成build文件,点击后生成的目录应该是这样的,bulid里面可能版本不一样生成的文件有些许差距
vscode下cmake工程环境配置以及调试配置(c++)_第8张图片
这是Cmake Tools工具帮你直接生成的,省去在终端cmake,之后直接点击vscode下方的 运行按钮 在这里插入图片描述
build目录下会生成一个 main.exe可执行文件,并且可在终端查看运行结果。

2.3.2 练手方法2

在编写完代码后,目录是这样的
vscode下cmake工程环境配置以及调试配置(c++)_第9张图片
之后开始操作,首先新建终端
vscode下cmake工程环境配置以及调试配置(c++)_第10张图片
建立build文件夹,再cd到build目录下
vscode下cmake工程环境配置以及调试配置(c++)_第11张图片
之后在终端处输入cmake ..,如果你电脑上装了vs20xx,可能会出现用MSVC生成makefile工程的情况
vscode下cmake工程环境配置以及调试配置(c++)_第12张图片
或者出现下面错误
vscode下cmake工程环境配置以及调试配置(c++)_第13张图片
出现上面两种错误都是使用命令 rm *, 选择全部删除之前的工程配置即可,再使用 cmake -G "MinGW Makefiles" ..代替cmake ..
vscode下cmake工程环境配置以及调试配置(c++)_第14张图片
出现用g++编译就ok,之后在终端输入 mingw32-make.exe, 回车就大功告成
vscode下cmake工程环境配置以及调试配置(c++)_第15张图片
最终生成的目录跟方法1一样
vscode下cmake工程环境配置以及调试配置(c++)_第16张图片

3 调试配置

3.1 新建tasks.json文件

按下图编辑一个tasks.json文件,编辑tasks.json文件的目的是即时更新代码会重新编译exe程序,以及省去终端的手动makefile的过程

{
	"version": "2.0.0",
	"options": {
		"cwd": "${workspaceFolder}/build"
	},
	"tasks": [
		{
			"type": "shell",
			"label": "cmake",
			"command": "cmake",
			"args": [
				".."
			]
		},
		{
			"label": "make",
			"group": {
				"kind": "build",
				"isDefault": true
			},
			"command": "mingw32-make.exe",	//windows下的命令
			"args": [

			]
		},
		{
			"label": "Build",
			//依赖于上面两个task命令
			"dependsOn":[
				"cmake",
				"make"
			]
		}
	]
}

3.2 新建launch.json文件

在这里插入图片描述
将生成的launch.json文件按照下列代码更改即可进行程序调试。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++.exe",
            "type": "cppdbg", 
            "request": "launch",
            "program": "${workspaceFolder}/build/${fileBasenameNoExtension}.exe",//${fileBasenameNoExtension}
            //            "program": "${command:cmake.launchTargetPath}", //${fileBasenameNoExtension}
            //如果用上面这条program的设置,可以一键调试,需要注释preLaunchTask同时可以不需要编写tasks.json,需要安装cmake Tool插件
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,//是否有黑框框
            "MIMode": "gdb",  
            "miDebuggerPath": "F:/MinGW64/bin/gdb.exe", //调试器地址
            "preLaunchTask": "Build" //预编译,调用tasks.json,与tasks.json里面的label一致
            "setupCommands": [
                {
                     "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ]

        }
    ]
}

到此,程序即可进行调试

这里解释一下args中自定义 exe文件存放路径:
${workspaceFolder}: 当前工作路径
exe: 自己建的文件夹
${fileBasenameNoExtension}: 当前文件的文件名,NoExtension意思就是不带后缀名,然后加个 .exe 就是当前的exe文件,也就是编译生成的 exe 文件
上述路径放一起意思就编译生成的 exe 文件放在exe文件夹中, 把这条配置删除的话,编译生成的exe文件就默认放在了当前工作路径下。

顺便说一下 vscode 中一些变量代表什么意思
${workspaceFolder} :表示当前workspace文件夹路径,也即/home/Coding/Test
${workspaceRootFolderName}:表示workspace的文件夹名,也即Test
${file}:文件自身的绝对路径,也即/home/Coding/Test/.vscode/tasks.json
${relativeFile}:文件在workspace中的路径,也即.vscode/tasks.json
${fileBasenameNoExtension}:当前文件的文件名,不带后缀,也即tasks
${fileBasename}:当前文件的文件名,tasks.json
${fileDirname}:文件所在的文件夹路径,也即/home/Coding/Test/.vscode
${fileExtname}:当前文件的后缀,也即.json
${lineNumber}:当前文件光标所在的行号
${env:PATH}:系统中的环境变量

你可能感兴趣的:(cmake使用笔记,vscode,c++,cmake,gcc/gdb编译调试)