【Ubuntu】手把手教你打造 【VS Code + Cmake + C/C++】 开发环境

2023-11-08

下载安装VSCODE+CMAKE

Cmake安装请看我的这篇帖子:

https://blog.csdn.net/TU_Dresden/article/details/122373789?spm=1001.2014.3001.5501

VScode下载:

https://vscode.cdn.azure.cn/stable/f80445acd5a3dadef24aa209168452a3d97cc326/code_1.64.2-1644445741_amd64.deb

下载好之后,使用dpkg命令安装

sudo dpkg -i codexxxxxx.deb

安装vscode相关插件

点击左侧按钮进入vscode的插件商店,安装Microsoft出品的两个插件,C/C++以及Cmake,装好之后重启vscode。

建立工作目录

vscode需要一个文件夹作为工作目录(workspace),相当于其他IDE的项目文件夹。所以我们先建立一个文件夹,用作工作目录。进入工作目录,用code .指令打开vscode,会自动加载工作目录。

mkdir cmakeproject
cd cmakeproject
code .

建立src和include目录及主程序

通常来说,一个规范的c++项目需要src和include两个文件夹,分别用于存放类的头文件和源文件。我们在工作空间建立src和include,分别创建一个头文件 archer.harcher.cpp

最后,创建一个 main.cpp ,用作主程序。最后如图所示:

在这里插入图片描述
代码如下:

archer.h

#pragma once
#include <iostream>
#include <string>
using namespace std;

class archer
{
private:
    string name;
    int arrow_amount;
public:
    archer(string name_input);
    ~archer();
    void shoot();
};

archer.cpp

#include "archer.h"

archer::archer(string name_input)
{
    this->name = name_input;
    this->arrow_amount = 100;
}

archer::~archer()
{
}

void archer::shoot()
{
    cout << "I have" << this->arrow_amount << "arrows!" << endl;
    cout << "shoot!" << endl;
    this->arrow_amount = this->arrow_amount - 1;
    cout << "I have" << this->arrow_amount << "arrows now!" << endl;
    cout << "Finish!" << endl;
}

main.cpp

#include "archer.h"

int main()
{
    archer a_good_archer("yangyouji");
    a_good_archer.shoot();
    return 0;
}

建立build目录及配置cmake

vscode本身并不具备编译功能,需要借助cmake和gcc来实现编译。所以本质上,我们是通过一系列配置,使vscode能够自动调用cmake的指令,在底层通过cmake来编译并运行我们的程序。

所以,我们需要先配置cmake的环境。我们先在工作空间根目录创建一个 CMakeLists.txt ,这个文件是cmake的编译单,告诉cmake要编译些啥,头文件在哪,编译成什么样子。另外还要新建一个 build 文件夹,用于存放cmake产生的中间文件和编译好的可执行程序。如图所示:

在这里插入图片描述
附上CMakeLists.txt的代码:

cmake_minimum_required(VERSION 3.0)

project(MyCmakeProj)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")

set(CMAKE_BUILD_TYPE Debug)

include_directories(${CMAKE_SOURCE_DIR}/include)

add_executable(my_exe main.cpp src/archer.cpp)

此时,点击vscode菜单栏的“终端”,开个新终端,在build目录输入cmake指令,再输入make进行编译,就可以生成可执行文件了。

cd build
cmake ..
make

在这里插入图片描述

配置json文件 自动调用cmake和gdb

刚才我们实现了手动编译运行。那么能否让vscode像其他IDE一样自动进行编译,运行以及下断电debug呢?当然可以,只需要配置tasks.json 以及 launch.json 两个文件即可。

launch.json主要描述了两件事,生成可执行文件(编译),运行可执行文件。而生成可执行文件的过程,则在tasks.json中描述。也就是说,在我们点击vscode的运行(Ctrl+F5)或调试运行(F5)之后,vscode会去调用tasks.json进行编译,再调用launch.json运行可执行文件或调试(下断点运行)可执行文件。

在这里插入图片描述
Ctrl+Shift+P调出vscode控制台,输入task,生成一个tasks.json文件,替换为以下内容:

{   
    "version": "2.0.0",
    "options": {
        "cwd": "${workspaceFolder}/build"
    },
    "tasks": [
        {
            "type": "shell",
            "label": "cmake",//第一个动作,执行cmake
            "command": "cmake",
            "args": [
                ".."
            ]
        },
        {
            "label": "make",//第二个动作,执行make
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "command": "make",
            "args": [
                

            ]
        },
        {
            "label": "Build",//把上面的两个动作绑定,命名为Build
			"dependsOrder": "sequence", 
            "dependsOn":[
                "cmake",
                "make"
            ]
        }
    ]

}

上面的tasks.json描述了编译过程。可以看出,这套指令有两个步骤,cmake … 和 make ,刚好是我们上一节手动输入的编译指令。

在这里插入图片描述
点击左侧瓢虫按钮,创建launch.json,替换为如下内容:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            //只需要改两处
            //第一处,在这里指定你的可执行文件的路径和名称
            "program": "${workspaceFolder}/build/my_exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "preLaunchTask": "Build",//第二处,绑定刚才的task
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

这里我们指定了可执行文件的路径以及上面tasks.json对应的label名,绑定编译指令。

此时,按下Ctrl+F5,成功运行,至此,VSCODE + CMAKE 环境配置成功,可以快乐地进行C/C++开发了!

在这里插入图片描述

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

【Ubuntu】手把手教你打造 【VS Code + Cmake + C/C++】 开发环境 的相关文章

随机推荐

  • gitlab可以访问,但git clone连接超时不能下载

    因此 我们可以把 http wozhendetainanle map 地址后面加上 git后缀 更改为 http wozhendetainanle map git 此时使用就可以下载了
  • 关于C#监视剪贴板信息

    1 常规方法 在C 中 有一个常规检测剪贴板的方法 用的是 System Windows Forms Clipboard 使用起来很简单 代码如下
  • 微信小程序中的App、Page、Component的生命周期函数

    有点混乱的官方文档 一 什么是生命周期和生命周期函数 字面意义上说 生命周期就是指一个对象自身的生老病死 在程序运行上也可以这么理解 程序也是对象 也有 生老病死 程序自身从创建到销毁的过程中 运行到特定的阶段 会触发特定的函数 这些函数
  • Distributed Database System —— 什么是嵌入式数据库?

    文章目录 什么是嵌入式数据库 Embedded Database 数据库服务器的架构 嵌入式数据库架构 区别 像Oracle Sybase MySQL和SQL Server这些大家熟知的数据库都属于数据库服务器 当然不排除某些也提供嵌入式版
  • “新”科学家Stephen Wolfram

    2011年10月的iPhone 4S发布会上 苹果副总裁Scott Forstall长按Home键 对着那个泛着紫色光晕的话筒问道 Stephen Wolfram 离圣诞节还有几天 让我查查 稍等 Scott得到了他想要的答案 82 天 也
  • 单片机设计_室内环境智能监测系统(STM32 OLED ESP8266 DHT11 MQ-2 加湿器)

    想要更多项目私wo 一 电路设计 室内环境智能监测系统 主要功能 1 检测空气温湿度 2 检测光照强度 3 检测烟雾浓度 4 数据显示在手机端和设备OLED屏幕上 5 当空气温度高于设定的阈值时 风扇开启 6 当空气湿度低于设定的阈值时 加
  • Hive基本架构和原理

    概述 Hive是建立在 Hadoop 上的数据仓库基础构架 它提供了一系列的工具 可以用来进行数据提取转化加载 ETL 这是一种可以存储 查询和分析存储在 Hadoop 中的大规模数据的机制 Hive 定义了简单的类 SQL 查询语言 称为
  • implicit declaration of function 问题解决

    C语言程序编译后出现警告 warning implicit declaration of function client tcpinit Wimplicit function declaration 原因 相关的头文件没有声明这个函数 在相
  • 如何使用Java以编程方式在Excel中创建数据透视表?

    Excel电子表格中的数据透视表用于以交互方式汇总数据 假设在工作表中有许多发票的数据 在这种情况下 可以使用数据透视表汇总按客户或产品分组的发票 在本文中 将学习如何以编程方式处理Excel中的数据透视表 特别是 将了解如何在Java中创
  • JavaScript—ES6 元编程(5)

    几年前 ES6 刚出来的时候接触过 元编程 Metaprogramming 的概念 不过当时还没有深究 在应用和学习中不断接触到这概念 比如 mobx 5 中就用到了 Proxy 重写了 Observable 对象 觉得有必要梳理总结一下
  • openGL之API学习(一一一)glUniform

    设置当前着色器程序中的一致变量的值 具体包含一系列函数 void glUniform1f GLint location GLfloat v0 void glUniform2f GLint location GLfloat v0 GLfloa
  • 持安零信任加入PKS体系生态联盟,共创办公安全新生态

    近日 PKS体系生态联盟公布最新一期会员单位名单 零信任办公安全领域的明星企业持安科技成为其网络安全领域新增会员 未来将与众多合作伙伴一同建设网络安全强国 PKS体系生态联盟是在中国电子信息产业集团有限公司的倡议下 广泛联合中央企业 国家研
  • html5--自定义属性

    一 添加属性 第一种不能html结构上看到 1 直接添加 通过querySelector获取到html元素之后 直接 属性进行初始化就可以为元素添加自定义属性了 div 123 div 2 setAttribute 属性名 属性值 添加自定
  • UML概述及UML类图详解

    引言 UML图有很多种 但是并非必须掌握所有的UML图 才能完整系统分析和设计工作 一般说来 在UML图中 只要掌握类图 用例图 时序图的使用 就能完成大部分的工作 也就是说 掌握UML的20 就能做80 的事情 对于程序员来说 最频繁使用
  • Unity_如何改变Image图片

    被改变的物体 public GameObject Tab3 需要改变的图片 public Sprite Tab3Img 加载将要用于修改的图片的路径 public string TabImgPath2 Image 2 void Start
  • vue 实现无缝向左滚动 鼠标悬停、离开时停止、开始滚动

    效果 可以根据此代码改为轮播 html代码
  • od机考真题-TLV解码

    while 1 try Tag input dct nums input split
  • 静态链接和动态链接

    静态链接 由于在我们实际的开发中 不可能将他们都放在一个文件中执行 所以将他们生成 o文件进行 从而要将他们进行链接 从而实现一个可以执行的程序 这个过程就是静态链接 静态库 是由多个多个 o文件压缩打包形成的一个文件 静态链接的优点 他在
  • linux的判断命令test之数值判断

    判断命令test一般用于脚本当中 可以简写为中括号 其会对跟随的条件进行判断 一般可以分为数值判断 字符串判断和文件判断 语法格式为test 判断条件 或 判断条件 注意中括号 与判断条件之间必须存在空格 还需注意判断条件的判断符号与比较值
  • 【Ubuntu】手把手教你打造 【VS Code + Cmake + C/C++】 开发环境

    下载安装VSCODE CMAKE Cmake安装请看我的这篇帖子 https blog csdn net TU Dresden article details 122373789 spm 1001 2014 3001 5501 VScode