VScode 中运行C++,并用g++命令、CMake、配置launch.josn和tasks.json来运行和调试可执行文件

news2024/11/29 16:42:50

前期安装准备

安装VScode、cmake、mingw32 (具体版本如下)

VSCodeUserSetup-x64-1.78.0.exe

cmake-3.26.3-windows-x86_64.msi

x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z

将这几个的bin目录加入系统环境变量(右击此电脑,属性,高级,环境变量,Path,编辑,新建)

VScode扩展插件安装:

  1. C/C++ v1.8.4(此插件需要注意版本)
  2. Chinese(中文简化)(选择性安装,要熟悉一点英文)
  3. C/C++ Extension Pack v1.3.0
  4. C/C++ Project Generator v1.2.11
  5. C/C++ Themes v2.0.0
  6. CMake v0.0.17
  7. CMake Tools v.1.14.31
  8. Code Runnner v0.12.0
  9. Makefile Tools v0.7.0

新建一个项目和main.cpp

#include<iostream>
using namespace std;

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

int main()
{
  int val1=18;
  int val2=20;
  cout<<"Before swap"<<endl;
  cout<<"val1="<<val1<<endl;
  cout<<"val2="<<val2<<endl;
  swap(val1,val2);
  cout<<"After swap"<<endl;
  cout<<"val1="<<val1<<endl;
  cout<<"val2="<<val2<<endl;
}

基于g++命令,编译单文件,生成带调试信息的可执行文件,并调试

g++ -g main.cpp -o my_single_swap

-g:代表生成可调试的.exe文件

-o:生成.exe文件名为my_single_swap.exe

更改项目分支,将swap函数单独拎出来

├── include

│ └── swap.h

├── swap.cpp

└── main.cpp

swap.cpp文件内容

#include "stdio.h"
void swap(int& a,int& b)
{
    int temp;
    temp=a;
    a=b;
    b=temp;
}

swap.h头文件里内容,声明交换函数

void swap(int& a,int& b);

main.cpp文件内容

#include<iostream>
#include "stdio.h"
using namespace std;
int main()
{
  int val1=18;
  int val2=20;
  cout<<"Before swap"<<endl;
  cout<<"val1="<<val1<<endl;
  cout<<"val2="<<val2<<endl;
  swap(val1,val2);
  cout<<"After swap"<<endl;
  cout<<"val1="<<val1<<endl;
  cout<<"val2="<<val2<<endl;
}

基于g++命令,编译多文件,生成带调试信息的可执行文件,并调试

g++ -g .\main.cpp swap.cpp -o my_single_swap

可能会报错,没有swap.h库,通过-I包含include文件夹

g++ -g .\main.cpp swap.cpp -I include -o my_single_swap

若项目构建方式不同,需要相应更改命令,比如swap.cpp,main.cpp放在src文件夹下

g++ -g .\src\main.cpp .\src\swap.cpp -I include -o my_single_swap

输入命令行时学会用 tab自动补全功能,代码编写:ctrl+"/"注释,shift+alt+向上或向下箭头复制行代码,ctrl+shift+p:打开面板platte

基于Cmake(相当于将g++命令集成与CMakeLists.txt文本中)

构建CMakeLists.txt(注意大小写)

├──CMakeLists.txt

├── include

│ └── swap.h

├── swap.cpp

└── main.cpp

CMakeLists.txt里的内容:

project(Myswap) //项目名
include_directories(include)//包含库文件,针对找不到swap.h问题
add_executable(my_swap main.cpp swap.cpp)//基于main.cpp, swap.cpp生成my_swap.exe

通过Cmake生成可执行文件,进行多文件编译并调试

  1. 输入ctrl+shift+p,选择cmake:Configure,选择g++(选定编译器)

  2. 打开终端,new terminal,输入以下命令

mkdir build(新建文件夹)
cd ./build(切换至build文件夹)
cmake .. -G "Unix Makefiles"(Ubuntu环境下)
cmake .. -G "MinGw Makefiles"(Win环境下)
cmake ..(生成Makefile文件)
mingw32-make.exe(运行生成.exe文件)

输入命令后,分支结构为:

├──build

│ └── Makefile

│ └── my_swap.exe

│ └── .cmake

│ └── CMakeFiles

│ └── cmake_install.cmake

│ └── CMakeCache.txt

│ └── compile_commands.json

├── include

│ └── swap.h

├──CMakeLists.txt

├── swap.cpp

└── main.cpp

配置json

launch.json-- for debug

tasks.json – for build before debug

用g++或cmake生成可执行文件后,点击run,start debugging(F5),选择C++(GDB/LLDB),选择调试的环境g++.

此时会生成 .vscode文件夹

├── .vscode

│ └── launch.json

│ └── tasks.json

在这里插入图片描述

launch.json需要注意两个地方

-1- “program”:对应生成的.exe文件

-2- “preLaunchTask”: “C/C++: g++.exe build active file” 需要与task.json里的label位置对应

-3- “args”: [],对应main.cpp里的

int main(int argc,char* argv)

tasks.json需要注意两个地方

“args”: [
“-fdiagnostics-color=always”,
“-g”,
f i l e " , " − o " , " {file}", "-o", " file","o","{fileDirname}\${fileBasenameNoExtension}.exe”
],
args对应输入的g++命令

在这里插入图片描述

launch.json里的preLaunchTask代表先进行build,对应tasks.json的label,它依赖于cmake、make两个子task.

label:cmake对应的command是cmake … ,

label:make对应的command是mingw32-make.exe,
即对应cmake生成可调式文件的两条命令。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/512430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础之ConcurrentHashMap答非所问

ConcurrentHashMap的数据结构是什么&#xff1f; ConcurrentHashMap仅仅是HashMap的线程安全版本&#xff0c;针对HashMap的线程安全优化&#xff0c;所以HashMap有的特点ConcurrentHashMap同意具有&#xff0c; ConcurrentHashMap的数据结构跟HashMap是一样的。 在JDK7版本使用…

中学理化生实验室建设及配置要求

中学理化生实验室是中学阶段进行物理、化学、生物教学和研究的场所。其可以满足实验教学要求,实验室提供必要的仪器、设备、工具、材料等课程资源&#xff0c;方便学生熟悉并接触一些实验仪器设备&#xff0c;学习掌握基本实验技能。同时&#xff0c;实验室科学合理的方案配置&…

MySQL原理(十):主从架构

前言 上一篇介绍了 MySQL 的表分区和分库分表&#xff0c;这一篇将介绍主从架构相关的内容。 主从架构 常见的主从架构模式有四种&#xff1a; 一主多从架构&#xff1a;适用于读大于写的场景&#xff0c;采用多个从库来分担数据库系统的读压力。多主架构&#xff1a;适用于…

康希诺生物:新冠疫苗影响当期业绩,毛利润减少89.92%

来源;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;由于4月28日&#xff0c;康希诺生物&#xff08;06185&#xff09;发布2023年一季度报告&#xff0c;收入同比下滑及利润端亏损&#xff0c;主要由于新冠疫苗需求量同比大幅下降&#xff0c;以及产品价格调整…

在 IDEA 中创建 Java Web 项目的方式(详细步骤教程)

开发环境 以下是我的开发环境 JDK 1.8Maven 3.6.3Tomcat 9.0IDEA 2019&#xff08;2019 无所畏惧&#xff0c;即使现在已经 2023 年了哈哈哈&#xff09; 最原始的 Java Web 项目 下面的内容可能会因 IDEA 版本不同&#xff0c;而有些选项不同&#xff0c;但是大同小异。 …

【上进小菜猪】使用Ambari提高Hadoop集群管理和开发效率:提高大数据应用部署和管理效率的利器

&#x1f4ec;&#x1f4ec;我是上进小菜猪&#xff0c;沈工大软件工程专业&#xff0c;爱好敲代码&#xff0c;持续输出干货&#xff0c;欢迎关注。 介绍 Hadoop是一种开源的分布式处理框架&#xff0c;用于在一组低成本硬件的集群上存储和处理大规模数据集。Ambari是一种基…

python 获取cookie的方法

在 Web应用程序中&#xff0c;用户访问网站时&#xff0c;通常会请求访问服务器上保存的一些用户信息&#xff08;例如&#xff1a; Cookie&#xff09;&#xff0c;这些信息包含了用户的一些个人信息&#xff0c;比如&#xff1a;姓名、地址、密码等。对于用户来说&#xff0c…

目标检测YOLO实战应用案例100讲-基于YOLOv3的目标检测研究及改进(论文篇)

知识拓展 多尺度特征学习 目前深度学习用于目标检测已经习以为常。从SSD到Yolo系列,其中: 深层网络的感受野比较大,语义信息表征能力强,但是特征图的分辨率低,几何信息的表征能力弱(空间几何特征细节缺乏); 低层网络的感受野比较小,几何细节信息表征能力强,虽然分辨…

国漫画江湖之不良人6真的封神!

国漫画江湖之不良人6真的封神&#xff01; 今天不良人第六季大结局&#xff0c;真的超好看&#xff0c;不仅剧情完整&#xff0c;而且还非常甜&#xff0c;看的非常爽&#xff0c;时长直接拉到40分钟&#xff0c;打斗场面刺激&#xff0c;简直是语言形容不出来的爽&#xff01…

[PyTorch]Onnx模型格式的转换与应用

相较于PyTorch默认的模型存储格式pth而言&#xff0c;onnx具有多端通用&#xff0c;方便部署的优点&#xff08;据称能加快推理速度&#xff0c;但是未验证&#xff09;&#xff0c;本文将介绍如何使用onnx并将原有的pth权重转换为onnx。 一、配置环境 在控制台中使用如下指令 …

【wordpress】管理员忘记密码? 三种方法找回

随着近年来网络攻击日趋频繁&#xff0c;我们在网站中所设置的各种密码也变得越来越复杂&#xff0c;wordpress现在也可以生成非常复杂的密码&#xff0c;以防止被暴力破解。 但这些复杂的密码一般是无法记住的&#xff0c;我们会将此存放在我们的记事本中 如果我们的记事本遗…

Linux--install and uninstall app

1. deb系列&#xff08;Ubuntu为例&#xff09; 1.2 mysql 参考链接 1.2.1 Install 1.2.1.1 方法一 #1.更新仓库 sudo apt update #2.安装库中mysql版本 sudo apt install mysql-server -y1.2.1.2 方法二 mysql官网下载 #1.下载指定版本 #2.装载该版本至系统仓库 sudo …

【加解密篇】利用HashCat破解RAR压缩包加密文件详细教程

【加解密篇】利用HashCat破解RAR压缩包加密文件详细教程 在取证知识里挖呀挖呀挖—【蘇小沐】 文章目录 【加解密篇】利用HashCat破解RAR压缩包加密文件详细教程1.实验环境2.RAR加密压缩包 &#xff08;一&#xff09;john软件1.使用CMD命令&#xff1a; run\rar2john.exe &am…

WGCNA | 不止一个组的WGCNA怎么分析嘞!?~(二)(共识网络分析-第二步-构建网络与模块-一步法)

1写在前面 最近遇到了非常不讲理的病人和家属&#xff0c;真是忍不住想要吐槽两句。&#x1f624; 为了让病人做上手术&#xff0c;求了输血科半天才给备了血&#xff0c;家属也答应去献血。&#x1f612; 万万没想到&#xff0c;术后都2天了还是没去献血&#xff0c;无论是问病…

达索系统助力中车制造运营管理(MOM)平台建设

案例背景&#xff1a; 中国中车股份有限公司&#xff08;中文简称“中国中车”&#xff0c;英文简称缩写“CRRC”&#xff09;承继了中国北车股份有限公司、中国南车股份有限公司的全部业务和资产&#xff0c;是全球规模领先、品种齐全、技术一流的轨道交通装备供应商。 中国…

MySQL---10、详细的数据类型

1、MySQL中的数据类型 类型类型举例整数类型TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT浮点类型FLOAT、DOUBLE定点数类型DECIMAL位类型BIT日期时间类型YEAR、TIME、DATE、DATETIME、TIMESTAMP文本字符串类型CHAR、VACHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT枚…

Java设计模式-装饰模式

简介 装饰模式在Java领域是一种常见的设计模式&#xff0c;它能够在不改变对象原有结构的情况下&#xff0c;动态地为对象添加新的功能。它通过封装原有对象&#xff0c;在运行时动态地为对象添加新的行为或者修改原有行为&#xff0c;以扩展对象的功能。这种方式避免了继承的…

C语言:简单的三子棋游戏

谈到三子棋&#xff0c;想必大家都不陌生&#xff0c;童年的回忆呀&#xff0c;读小学的时候有事没事就和同学玩上个几把&#xff0c;玩起来很得劲&#xff0c;作为一个学习计算机的博主&#xff0c;自然而然用代码来实现三子棋啦&#xff0c;再次感受童年的记忆&#xff0c;闲…

yolov8 实例分割 C++部署

此处仅为个人结果记录&#xff0c;并无完整部署代码 目录 Pre 一、OpenCV DNN C 部署 二、ONNX RUNTIME C 部署 Pre 一定要知道&#xff0c;yolov8的输出与Yolov5 7.0 实例分割的输出不一样&#xff0c; output0: float32[1,116,8400]。 116是4个box坐标信息80个类别概率…

政务场景|看「API-SMAC」如何守好API,保障流动数据安全

API让一切都变得更加容易。 在数字化进程加速中&#xff0c;API作为高速通道&#xff0c;让数据的流动变得更加自由。当然&#xff0c;黑客也这么认为。从前窃取数据需要攻入内网&#xff0c;再经过一系列复杂的横向移动最终访问目标数据库&#xff0c;极易被安全设备拦截。现在…