vscode链接远程服务器开发c++项目

news2024/11/24 6:41:27
  1. 因为要在linux环境下开发c++应用,需要一个比较好用的远程工具。
  2. 之前做深度学习的时候一直用vscode链接服务器写python,感觉用起来很舒服。

vscode下载安装这些就略过了,从插件安装和配置文件开始介绍
参考文章:https://zhuanlan.zhihu.com/p/112125338
上面这个整体写的不错,不过一些细节部分个人觉的存在一些问题,也比较容易出错,下面写一个更清晰的。

1. 相关插件

  1. c++插件:c/c++和c/c++ Extension Pack两个插件
  2. CMake插件:CMake,Cmake Tools,Makefile Tools个插件
  3. 远程插件:Remote-SSH。
    直接在vscode扩展里面搜索安装即可。

2. 基本配置

2.1 g++和CMake安装

在远程linux中安装g++和cmake工具,方法网上有很多。
给出个参考:

  1. 安装g++和gcc:yum -y install gcc g++ make
  2. 安装cmake:https://blog.csdn.net/qq_40482358/article/details/130712473

2.2 Remote-SSH插件的使用

这里有一个比较全的:https://zhuanlan.zhihu.com/p/68577071
但如果只是想简单的使用,也没必要看那么多。
安装完Remote-SSH插件之后,vscode左边会出现一个远程资源管理器的小图标,点进去,再点一下小齿轮,出现两个配置文件,选第一个,个人用户配置
在这里插入图片描述
然后按照这个格式编辑一下即可

Host <远程主机名称1>
    HostName <远程主机1 IP>
    User <用户名1>
    Port <ssh端口,默认22>
    IdentityFile <本机SSH私钥路径>
    ForwardAgent yes <VSCode 自己添加的,不用管>

Host root16g
  HostName 172.28.93.167
  User root
Host test16g
  HostName 172.28.93.167
  User test
Host root8g
  HostName 172.28.93.177
  User root

然后选择对应的链接,输入密码即可。

3. 配置编译命令和调试命令

demo项目结构如下:

demo/
|---src/
|	|---add.h
|	|---add.cpp
|---main.cpp
|---CMakeLists.txt

代码简单写一下

// add.h
#ifndef SRC_ADD_H
#define SRC_ADD_H
int add(int a, int b);
#endif
//add.cpp
#include"add.h"
int add(int a, int b){
    return a + b;
}
// main.cpp
#include<cstdio>
#include"src/add.h"
int main() {
	int a = 1;
	int b = 2;
	printf("%d + %d = %d\n", a, b, add(a, b));
}

CMakeLists.txt内容:

# 指定cmake最低版本
cmake_minimum_required(VERSION 3.21)
# 定义项目名称
project(demo)

# 指定-std=c++11
set(CMAKE_CXX_STANDARD 11)

# 找当前目录下所有源文件, 保存到DIR_SRCS中
aux_source_directory(. DIR_SRCS)
aux_source_directory(./src DIR_SRC_SRCS)

# 指定生成目标
add_executable(main ${DIR_SRCS} ${DIR_SRC_SRCS})

很明显,正常来说,在demo目录中,执行cmake .命令获得makefile文件,之后执行make命令编译出可执行文件main。

如何通过vscode执行以上步骤呢?

3.1 首先需要先了解vscode各项配置的涵义

一个vscode项目中的个性化配置信息都会被vscode保存在项目中的.vscode目录中,以demo项目举例,现在这个项目的文件结构应该是

demo/
|---.vscode/
|---src/
|	|---add.h
|	|---add.cpp
|---main.cpp
|---CMakeLists.txt

其中.vscode目录下可能没什么东西,因为我们还什么都没配置呢,只有我们配置之后,vscode才会在该目录下创建一个个性化配置的文件。

3.1.1 c_cpp_properties.json

c_cpp_properties.json文件是c/c++扩展的配置文件,可以配置一些包含路径,编译器路径,编译器参数等信息。
通过Ctrl + Shift + P 快捷键打开命令窗口,首先配置c/c++扩展,通过(UI)和(JSON)都可以,UI就是可视化的配置文件,这里用JSON配置,比较好写
选择c_cpp_properties.json文件,vscode会自动在.vscode目录下创建对应的文件
文件内容是:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**", //默认的目录,自动生成的
                "/usr/include/**" // 需要自行添加的本地头文件目录
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++14",
            "intelliSenseMode": "linux-gcc-x64",
            "configurationProvider": "ms-vscode.makefile-tools"
        }
    ],
    "version": 4
}

文件内容比较简单,就是定义一些编译信息(其实如果使用cmake的话,不会用到的,这些信息可以看成写代码时vscode的语法补全等操作,不涉及编译等信息,因为我们的编译配置都会在CMakeLists.txt中配置)。

3.1.2 launch.json

launch.json文件是告知vscode在启动调试时如何启动程序,通过vscode右上角的那个小齿轮(添加调试配置)可以自动生成该文件,并且会自动生成一些配置信息。

我们可以改一下名字name,改一下prgram和cwd,然后就是preLaunchTask。

{
    "configurations": [
        {
            "name": "(gdb)Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/build/${fileBasenameNoExtension}", // 程序路径 我这里是build下
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}/build/", // 工作目录
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "preLaunchTask": "build debug", // 使用build debug预处理方法
            "miDebuggerPath": "/usr/bin/gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
        },
    ],
    "version": "2.0.0"
}

注意几个点:

  • 我习惯将编译文件都放在build下,因此工作目录和程序路径都在build目录下
  • preLaunchTask是预处理方法,需要在tasks.json中定义

3.1.2 tasks.json

tasks.json文件就是launch.json中prelaunchtask字段中的预处理或后处理配置。
这些任务可以在编译之前或之后执行,非常方便。
我们在这里实现一下launch中定义的build debug任务

{
    "tasks": [
        {
            "label": "build debug",
            "type": "shell",
            "linux":{
                // 配置每次编译之前都会执行一次cmake
                "command": "mkdir -p build && cmake -B build -DCMAKE_BUILD_TYPE=Debug && cd build && make",
            }
        },
    ],
    "version": "2.0.0"
}

内容很简单,每次编译之前都会执行一次cmake系列的命令。
拆解出来就是

  1. 创建build目录
  2. cmake -B build -DCMAKE_BUILD_TYPE=Debug指定build目录是生成文件和目标文件的目录,并指定编译类型为debug
  3. 切换到build目录执行make进行编译

以上,配置信息已经完成了,接下来就可以启动调试来测试了。

4. 测试

在main下面打上断点,启动调试,选择定义的任务 (gdb) Launch
目录结构会变为:

demo/
|---.vscode/
|---build/
|---|---src/
|---|---CMakeList.txt
|---|---main
|---src/
|	|---add.h
|	|---add.cpp
|---main.cpp
|---CMakeLists.txt

可以看到可视化的调试信息:
在这里插入图片描述
因为我用的远程服务器设计保密,屏蔽了系统的截图,所以就拍个照片放上了。

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

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

相关文章

如何做一份精致的性能测试报告?

相比于普通的功能测试&#xff0c;性能测试对测试工程师的技能要求更高&#xff0c;一般来说&#xff0c;也只有中高级测试工程师才会有机会做性能测试。 对于题主关心的问题&#xff0c;我拆分出下面三个部分来做解答&#xff1a; 1、性能测试报告的目的 2、性能测试过程中的关…

【算法分析与设计报告】快递终端送货配送系统、基因序列比较、地图染色、文章查重系统、果园篱笆问题(附源码)

一、快递终端送货分配问题 问题描述 假设某快递终端投递站&#xff0c;服务n个小区&#xff0c;小区与快递点之间有道路相连&#xff0c;如下图&#xff0c;边上的权值表示距离。 图1-1 小区快递点图 现在设有m包裹&#xff0c;每个包裹都有自己的目的地及总量。 假设送货员一…

IPB072N15N3G-ASEMI代理英飞凌高压MOS管IPB072N15N3G

编辑&#xff1a;ll IPB072N15N3G-ASEMI代理英飞凌高压MOS管IPB072N15N3G 型号&#xff1a;IPB072N15N3G 品牌&#xff1a;英飞凌 封装&#xff1a;TO-263 最大漏源电流&#xff1a;31A 漏源击穿电压&#xff1a;600V RDS&#xff08;ON&#xff09;Max&#xff1a;99mΩ…

第四届“中国法研杯”司法人工智能挑战赛-刑期预测赛道三等奖方案

一、前言 本文将回顾第四届“中国法研杯”司法人工智能挑战赛-刑期预测算法赛道比赛。使用多任务预训练、然后进行微调的形式最终在比赛中取得了三等奖的成绩。 二、任务介绍 主办方在第一届“中国法研杯”比赛上提出了刑期预测任务&#xff0c;本届将针对往届刑期预测准确率…

《终身成长》笔记六——称赞努力的过程,也将其与结果关联

目录 经典摘录 成为好父母好老师 成长型思维模式的真伪 第一种错误理解&#xff1a;很多人将他们身上某些他们喜欢的优点称作“成长型思维模式” 第二种错误理解&#xff1a;很多人认为成长型思维模式只关乎努力&#xff0c;特别是去夸奖别人的努力 第三种错误理解&#xff…

基于树莓派4B的智能家居

基于树莓派4B的智能家居 前言C语言的简单工厂模式工厂模式介绍类和对象工厂模式的优缺点优点缺点 智能家居框架产品工厂卫生间灯设备二楼灯设备餐厅灯设备客厅灯设备泳池灯设备风扇设备锁设备警报器设备地震监测设备火灾监测设备温湿度检测设备 指令工厂语音控制设备server控制…

如何创建样本手册?

第一步&#xff1a;提前研究和规划 首先明确目标客户群体在其中扮演的角色。 谁会穿你的衣服&#xff1f;您品牌的潜在客户是谁&#xff1f;他们的愿望是什么&#xff1f;他们会被什么打动&#xff1f;设置客户角色至关重要&#xff0c;因为它将决定样本手册的基调&#xff0…

Simulink 自动代码生成电机控制:模型仿真速度的优化

目录 方法一 Simulationmode 方法二 多核并行 方法三 Performance Advisor 总结 方法一 Simulationmode 执行下面的指令获取Simulink仿真实时&#xff0c;这里以霍尔FOC的模型为例&#xff0c;在切换模式为Accelerator时不能使用调用子模型的形式&#xff0c;需要把子模型复制…

map的forEach区别

map的forEach区别 先总结下&#xff1a; map和forEach区别是&#xff1a; 1.map有返回值而且必须return返回一个数组才行 ; 而forEach没有返回值可直接打印结果&#xff1b; 即&#xff1a;forEach()方法不会返回执行结果&#xff0c;而是undefined。也就是说&#xff0c;forEa…

vue 在线聊天实战范例(含选择发送表情、图片、视频、音频,自定义右键快捷菜单,一键复制,左右聊天气泡)

最终效果 完整代码 index.vue <template><div class"page"><div class"leftBox"><h1>访客</h1><div class"chatBox"><div class"chatRecordBox"><div v-for"(item, index) in cha…

DBCO-COOH分子量:305.3,CAS:1353016-70-2,二苯基环辛炔-羧基;类似有DBCO-NH2、SH、MAL、NHS等等

中文名称&#xff1a;二苯基环辛炔-羧基 英文名称&#xff1a;DBCO-acid 英文别称&#xff1a;DBCO-COOH cas: 1353016-70-2 分子式&#xff1a;C19H15NO3 分子量&#xff1a;305.3 DBCO-COOH是DBCO 衍生化的常用构件&#xff0c;在EDC、DCC和HATU等活化剂存在下&#xf…

linux kernel menuconfig kconfig makefile

概述 menuconfig是Linux平台用于管理代码工程、模块及功能的实用工具。 menuconfig的使用方式通常是在编译系统之前在系统源代码根目录下执行make menuconfig命令从而打开一个图形化配置界面&#xff0c;再通过对各项的值按需配置从而达到影响系统编译结果的目的。 Nuttx的me…

Spring Boot 数据库操作Druid和HikariDataSource

目录 Spring Boot 数据库操作 应用实例-需求 创建测试数据库和表 进行数据库开发&#xff0c; 在pom.xml 引入data-jdbc starter 参考官方文档 需要在pom.xml 指定导入数据库驱动 在application.yml 配置操作数据源的信息 创建bean\Furn.java 测试结果 整合Druid 到…

六、easyUI中的window(窗口)组件

1.window&#xff08;窗口&#xff09;组件的概述 窗口控件是一个浮动和可拖拽的面板&#xff0c;它可以用作应用程序窗口。默认情况下&#xff0c;窗口可以移动&#xff0c;调整大小和关闭。它的内容也可以被定义为静态HTML或要么通过Ajax动态加载 2.window&#xff08;窗口&…

MySQL-备份+日志:介质故障与数据库恢复

MySQL-备份日志&#xff1a;介质故障与数据库恢复 第1关&#xff1a;备份与恢复任务描述相关知识MySQL的恢复机制MySQL的备份与恢复工具编程要求代码参考 第2关 备份日志&#xff1a;介质故障的发生与数据库的恢复任务描述相关知识编程要求测试说明代码参考 第1关&#xff1a;备…

《分布式微服务电商源码》-项目简介

1.常见的电商模式 市面上有 5 种常见的电商模式 B2B、B2C、C2B、C2C、O2O 1.1.B2B 模式 B2B(Business to Business)&#xff0c;是指商家和商家建立的商业关系&#xff0c;如阿里巴巴. 1.2.B2C 模式 B2C(Business to Consumer) 就是我们经常看到的供应商直接把商品买个用户&a…

057:cesium设置纯颜色材质

第057个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置纯颜色的材质,颜色的表达方式可以参考这篇文章 Cesium七种方法设置颜色 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共87行)相关API参考:专…

用友BIP新零售产品发布,与零售企业共创新未来

随着数智化时代的到来&#xff0c;零售企业不断面临着更多的挑战和机遇。为了满足消费者多元化的需求&#xff0c;零售企业需要采用多种方式来提高竞争力&#xff0c;如多渠道销售、线上线下融合、数智化运营、个性化营销和无缝化体验等。用友BIP新零售为零售企业提供了数智化转…

Jenkins的持续集成与持续部署

系统总体架构 Gitlab Gitlab是一款主要用于代码管理的工具&#xff0c;相较于GitHub&#xff0c;可以自己搭建服务器&#xff0c;这可以避免因为网络速度慢导致部署效率低下&#xff0c;同时&#xff0c;自己搭建服务器&#xff0c;安全性更高。Jenkins Jenkins主要用于管理版本…

改图片分辨率:提升图像质量的关键步骤

无论您是一名摄影师、设计师&#xff0c;还是一个爱好者&#xff0c;改变图片分辨率都是必不可少的工作。在本文中&#xff0c;我们将介绍改图片分辨率的作用以及它在哪些场景下使用。 改图片分辨率介绍 图片分辨率是指图像中所包含的像素数量&#xff0c;通常以“每英寸像素…