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

2023-05-16

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
在这里插入图片描述
Version 指的是 gcc 的版本,如果没有特殊的需求,一般选择最高的版本号即可。
操作:在这个版本中,最高版本是 6.2.0 ,选中它即可。
在这里插入图片描述
Architecture 是指电脑系统是 32位 还是 64位,根据你的电脑系统做出对应选择。
操作:我的电脑系统是 64位 的,所以我选择了 x86_64,如果你是 32位 系统,则选择 i686 即可。
在这里插入图片描述
这个世界上只有两种操作系统,符合 posix 协议的,和 Windows 。如这个笑话所说的,如果你想要开发 Windows 程序,需要选择 win32 ,而开发 Linux、Unix、Mac OS 等其他操作系统下的程序,则需要选择 posix 。
在这里插入图片描述
异常处理在开发中非常重要,你在开发的过程中,大部分的时间会耗在处理各种异常情况上。如果你之前选择了 64位,则这里有两个异常处理模型供你选择,seh 是新发明的,而 sjlj 则是古老的。seh 性能比较好,但不支持 32位。 sjlj 稳定性好,支持 32位。
在这里插入图片描述
选择了 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中安装插件, 下图所示都安装了吧

在这里插入图片描述

2 工程配置

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

  1. 新建一个文件夹Cmake_test,用vscode打开
  2. 在文件夹下新建 .vscode 文件夹 和 source 文件夹,.vscode下存放配置文件,source下存放头文件和源文件,
  3. 在根目录下新建 CMakeLists.txt文件
    完成后 如图所示
    在这里插入图片描述

2.2 代码编写

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

//main.cpp
#include<iostream>
#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里面可能版本不一样生成的文件有些许差距
在这里插入图片描述
这是Cmake Tools工具帮你直接生成的,省去在终端cmake,之后直接点击vscode下方的 运行按钮 在这里插入图片描述
build目录下会生成一个 main.exe可执行文件,并且可在终端查看运行结果。

2.3.2 练手方法2

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

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}:系统中的环境变量

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vscode下cmake工程环境配置以及调试配置(c++) 的相关文章

  • etcd概述

    本文主要介绍了 etcd 相关概念 xff0c 以及 etcd 的主要使用场景 1 介绍 etcd 是云原生架构中的基础组件 xff0c 由 CNCF 孵化托管 etcd 在微服务和 kubernetes 集群中不仅可以作为服务注册中心用于
  • etcd启动过程梳理

    源码地址 xff1a https github com etcd io etcd 1 入口 scripts build sh run build echo Running 34 1 34 if 1 then log success 34 S
  • etcd v3使用示例

    1 简单使用 1 1 增加 set 指定某个键的值 例如 etcdctl span class token builtin class name set span testdir testkey span class token strin
  • 解决Docker运行命令时提示“Got permission denied while trying to connect to the Docker daemon socket“

    参考自 xff1a 公众号 xff1a 写bug的程旭源 问题截图 原因 xff1a docker守护进程启动的时候 xff0c 会默认赋予名字为docker的用户组读写Unix socket的权限 方法1 xff1a 使用sudo获取管理
  • CAN 读取ACK知对方是否接收成功

    首先 xff0c 了解一下CAN的ACK段 上图是一个数据帧 xff0c 其ACK段用来确认是否正常接收 由 ACK 槽 ACK Slot 和 ACK 界定符 2 个位构成 当发送单元发送到CRC段后 xff0c 会在ACK段发送2个隐性位
  • C++使用json在Linux中实现TCP通信

    最近在学习使用json格式在Linux中进行tcp通信 以下为学习笔记 我使用的第三方库为nlohomann json 仓库地址为 nlohmann json JSON for Modern C 43 43 github com nloho
  • C语言经典笔试题(一)

    1 请填写bool float 指针变量 与 零值 比较的if 语句 提示 xff1a 这里 零值 可以是0 0 0 FALSE 或者 空指针 例如int 变量n 与 零值 比较的if 语句为 xff1a if n 61 61 0 if n
  • PCB学习笔记

    1 笔记 1 PCB屏幕变暗 xff0c 鼠标左键点空白处加ALT 2 TM默认改变所有错误 xff0c 变红色正常 3 PCB线默认电源和地30mil或者尽量粗 xff0c 其他根据引脚粗细 4 修改PCB过孔尺寸 xff0c PV快捷键
  • Java中this的用法总结

    Java的this用法 1 普通的直接引用 这种就不用讲了 xff0c this相当于是指向当前对象本身 2 xff0c 当局部 xff08 或者形参 xff09 变量和成员变量重名的时候 xff0c 在方法中使用this表示成员变量以示区
  • keil软件中按F12 无法跳转到函数、变量定义处

    keil中按F12无法跳转到定义 原因分析 xff1a 我们都习惯性在最开始建立项目目录会以中文命名 xff0c 导致有时候某些软件就出现奇怪问题 xff0c keil版本都比较高了 xff0c 所以有时会出现之前旧版本没有的问题 xff0
  • VSCode修改主题颜色

    参考 xff1a https jingyan baidu com article ea24bc3983f2b59b63b33144 html 步骤1 xff1a 使用vscode打开一个工程 xff0c 点击左下角的设置按钮 步骤2 xff
  • Linux 中的驱动开发的初学者体会

    Linux 中的驱动开发的初学者体会 很多年前 xff0c 心里就存下这样一个愿望 就是把Linux 的驱动开发搞清楚 但是一开始上上这样的开发难度天大了 xff0c 对着一堆的寄存器发愁 于是就从简单的STM8 xff0c PIC16FX
  • 串口助手SerialAide

    串口助手SerialAide 1 基础界面 2 描述 1 自动搜索串口 xff1b 2 接收数据可以进行十六进制和ASCII切换 3 接收和发送数据可以设置不用颜色显示 xff0c 方便查看 xff1b 4 可以使用多命令表进行循环发送 x
  • jetson nano的处理器架构

    jetson nano 的架构是 arm64 注意与 amd64 区分 比如安装 vscode 时 下载一个 deb 里面的 xff21 rm64 即可
  • Docker 部署clickhouse-server及添加用户配置密码

    前言 由于现在居家办公测试环境连接公司的clickhouse需要vpn连接太麻烦且速度很慢 xff0c 于是乎在测试机自己搭建clickhouse xff0c 废话不多说直接开始教程 容器clickhouse server配置 拉取clic
  • 把寄存器做成一个结构体,赋值初始地址后寄存器赋值的操作

  • CMake中文手册_target_link_libraries(3.26)

    cmake commands 7 cmake 命令 7 概述 此命令具有以下各小节详细介绍的多个签名 所有这些签名都具有以下通用形式 xff1a target link libraries 命名的 必须是由 add executable 或
  • 【STM32】UART串口通信无法通信问题(SSCOM)

    需要在target里面勾选上MicroLIB才能显示 然后要完全编译 xff0c 编译全部的代码 找到正确的串口号 然后就可以正常在SSCOM xff08 或其它软件 xff09 中显示了 如果需要学习STM32 UART通信方法请移步这个
  • CMake中文手册_target_sources(3.26)

    target sources xff08 xff09 新版本 3 1 将源文件添加到目标 target sources xff08 span class token operator lt span target span class to
  • QML信号与信号槽实践指南:轻松掌握现代软件开发的关键技术

    这里写目录标题 xff08 一 xff09 QML简介1 1 QML概述1 2 QML的基本语法1 3 QML与C 43 43 的交互 xff08 二 xff09 QML信号基本概念2 1 QML中的信号2 2 QML信号的作用与优势 xf

随机推荐