首页 > 编程语言 >VSCode配置C++环境

VSCode配置C++环境

时间:2024-05-29 18:31:53浏览次数:14  
标签:tasks VSCode 配置 gdb C++ json exe main

目录

这篇文章讨论一下VSCode配置C++的方法,重点要讨论的是tasks.json和launch.json这两个配置文件,所以很多基础内容会直接略过。

一.环境准备

1.安装MinGW-w64。为啥要装MinGW-w64?因为VSCode只是个编辑器,MinGW-w64包含了gcc编译器和gdb调试器。

2.安装VSCode。

3.安装VSCode的C/C++扩展。

好了,完成。

二.编写代码

1.先看目录结构。
在这里插入图片描述
很简单对不对。

2.然后看看代码。

//demo.h

void Print(void);
//demo.cpp

#include"demo.h"

#include<iostream>

void Print(void)
{
    std::cout<<"hello world"<<std::endl;
}
//main.cpp

#include"demo.h"

int main(int argc, char *argv[])
{
    Print();

    return 0;
}

也非常简单对不对。

三.直接利用gcc以及gdb编译调试

为什么要利用gcc和gdb进行编译调试?不是要讨论VSCode配置C++环境吗?因为要讲清楚tasks.json和launch.json内容编写的思路。

1.在VSCode中打开一个终端,输入命令g++ -g main.cpp ./src/demo.cpp -I ./include/ -o main.exe
在这里插入图片描述
现在可以看到生成了main.exe可执行程序。
在这里插入图片描述
2.接着就可以gdb调试了。

四.配置tasks.json和launch.json

重点来了,先说一下这两个文件是干嘛的。可以这么理解,tasks.json对应gcc,用来配置如何生成main.exe,launch.json对应gdb,用来配置如何调试main.exe。

1.先看一下tasks.json的内容。

//tasks.json

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "cppbuild",
			"label": "C/C++: g++.exe 生成活动文件",//任务名称
			"command": "C:\\Program Files\\mingw64\\bin\\g++.exe",//编译器所在的位置
			"args": [
				"-fdiagnostics-color=always",
				"-g",
				"main.cpp",
				"./src/demo.cpp",
				"-I",
				"./include/",
				"-o",
				"${workspaceFolder}\\main.exe"
			],//编译参数
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": {
				"kind": "build",
				"isDefault": true
			},
			"detail": "编译器: \"C:\\Program Files\\mingw64\\bin\\g++.exe\""
		}
	]
}

比较重要的字段已经写好了注释,label是指任务名称,command是指要使用的编译器所在的位置,args是指编译参数,是不是发现args的内容和刚才直接gcc编译时的参数很像,很对,这个args就是gcc编译参数。

2.接着看一下launch.json的内容

//launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}\\main.exe",//可执行程序的位置
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\Program Files\\mingw64\\bin\\gdb.exe",//调试器所在的位置
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++.exe 生成活动文件"//前置任务的名称
        }
    ]
}

比较重要的字段已经写好了注释,program是指要调试的可执行程序所在位置,也就是tasks.json生成的目标程序所在位置,miDebuggerPath是指要使用的调试器所在的位置,preLaunchTask是指前置任务名称。是不是发现这个preLaunchTask和tasks.json里的label是一样的,很对,就是一样的,而且必须一样。这个表示在执行调试任务之前,要先执行生成任务。这样VSCode就会先生成可执行程序,然后启动调试。

配置思路是不是打开了。

3.配置完成,F5调试。

五.其他

1.可以看一下json文件的格式,会有帮助,而且json文件这么主流。

2.很多文章里提到c_cpp_properties.json,其实这个配置文件可以不写,tasks.json的args字段才是编译时真正用到的,当然这个写了对智能提示有帮助,方便。

3.如果是一些简单的项目,使用这种构建方法还是可以的,但是复杂项目还是安装cmake扩展,使用cmake的好。

标签:tasks,VSCode,配置,gdb,C++,json,exe,main
From: https://blog.csdn.net/2401_85374181/article/details/139302692

相关文章

  • vite开发环境、生产环境配置
    一,前言一个项目可能会有开发版本、上线版本、测试版本等等多个版本,不同的环境会有不同请求api接口,就需更改一些基本配置,这时候就显得很麻烦,所以这里就使用了环境变量。我们只需做简单的配置,把环境状态切换的工作交给代码。二,开发环境也就是编码时运行的环境,即我们使用npmrund......
  • 通过admin配置定时任务
    通过admin配置定时任务安装包pipinstalldjango-celery-beat#使用这个的前提是你已经安装了其他包了pipinstallDjangopipinstallcelerypipinstallredispipinstalleventlet去app中注册INSTALLED_APPS=[ #其他包"django_celery_beat",]屏蔽掉原来......
  • c++ static const
      ===============================首先得知道为什么要使用静态数据成员:在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。使用静态数据成员......
  • C++ 跨线程 传递指针
    目录在C++中跨线程传递指针时,需要注意线程安全和生命周期管理的问题。以下是一些常见的方法,用于在C++中安全地跨线程传递指针:使用智能指针和线程安全队列结合使用std::shared_ptr和线程安全的队列(如std::queue配合互斥锁)是一种常见的方法。#include<iostream>#include<t......
  • Nginx配置https
            HTTPS相对于HTTP提供了更高级别的数据保护和安全性,尤其适合处理敏感信息如个人数据、支付信息等,而HTTP则更适合对安全性要求不高的普通网页浏览。随着网络安全意识的提升和搜索引擎的推动,HTTPS正逐渐成为网络通信的标准。配置自签证书opensslreq-x509-nod......
  • C++:虚表指针、虚表、虚函数和动态多态
    classBase{public:virtualvoidshow(){std::cout<<"Baseshow"<<std::endl;}};classDerived_1:publicBase{public:voidshow()override{std::cout<<"Derivedshow"<<std::endl;}};class......
  • C++ 线程同步condition_variable的使用
    一,condition_variable使用步骤创建一个scondition_variable对象。创建一个互斥量对象mutex。创建两个线程:等待线程和唤醒线程。在等待线程中,使用unique_lock锁定互斥量,并调用wait函数进入等待状态。在唤醒线程lock_guard锁定互斥量,并调用notify_one或notify_all函数唤醒等......
  • nginx负载均衡配置详解
    Nginx的负载均衡功能是通过upstream模块来实现的,允许将客户端的请求分发到多个后端服务器,以达到分散负载、提高系统稳定性和响应速度的目的。下面是一些关于Nginx负载均衡配置的详细说明:1.定义UpstreamBlock首先,在Nginx配置文件(通常是/etc/nginx/nginx.conf或者......
  • C++ std::function和std::bind的六种用法总结
    一,使用funciton和bind的六种方法1,使用function接收普通函数2,使用function接收lambda函数3,使用function函数来接收函数对象4,使用bind函数绑定类中的一般函数5,使用bind函数绑定类中的多态函数6,使用function来实现回调。二,代码实现直接看代码和注释:#include<iostream>#......
  • vite配置自动引入全局scss变量文件
    全局自动引入scss变量文件当定义了全局的scss变量文件并且而其他很多页面都需要使用的时候,都需要显式的使用@import或者@use引用一遍全局scss文件,很是麻烦。使用以下配置这样能有效避免造成大量重复工作,可以在任何scss文件中任意使用全局变量。定义全局scss变量文件配置vi......