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

news/2025/1/8 14:42:04/
  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 root16gHostName 172.28.93.167User root
Host test16gHostName 172.28.93.167User test
Host root8gHostName 172.28.93.177User 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.ppmy.cn/news/78705.html

相关文章

【三维激光扫描】实验04:SiScan基于点云的量测功能

SiScan软件提供的基于点云的量测功能有:两点距离量测、多点距离量测、点到面距离量测、高度量测、坡度量测、角度量测、投影面积量测等等。 文章目录 一、两点距离量测二、多点距离量测三、点到面距离量测四、高度量测五、坡度量测六、角度量测七、投影面积量测一、两点距离量…

了解信号的传输方式、编码与调制、信道的极限容量

1.了解信号的传输方式、编码与调制、信道的极限容量 笔记来源&#xff1a; 湖科大教书匠&#xff1a;传输方式 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 1.1 了解信号的传输方式 串行传输与并行传输 同步传输与异步传输 为什么需要收发双发…

一、尚医通微信登录

文章目录 一、登录需求1、登录需求 二、微信登录1、OAuth21.1OAuth2解决什么问题1.1.1 开放系统间授权1.1.2图例1.1.3方式一&#xff1a;用户名密码复制1.1.4方式二&#xff1a;通用开发者key1.1.5方式三&#xff1a;颁发令牌 1.2 OAuth2最简向导1.2.1 OAuth主要角色1.2.2最简向…

Linux和UNIX的关系及区别(详解)

UNIX 与 Linux 之间的关系是一个很有意思的话题。在目前主流的服务器端操作系统中&#xff0c;UNIX 诞生于 20 世纪 60 年代末&#xff0c;Windows 诞生于 20 世纪 80 年代中期&#xff0c;Linux 诞生于 20 世纪 90 年代初&#xff0c;可以说 UNIX 是操作系统中的"老大哥&…

控制器接受广播信息并反馈IP的python服务,和一个window上广播搜索的服务

以下是一个简单的Python服务示例&#xff0c;用于控制器接收广播信息并反馈其IP地址&#xff1a; #!/usr/bin/env python # -*- coding: utf-8 -*- import socket# 定义广播消息和端口号 broadcast_port 12345# 创建UDP套接字并绑定到广播地址和端口号 sock socket.socket(s…

Oracle-DDL(创建与管理表)

目录 一、创建表 二、修改表 三、删除表 四、对象重命名&#xff1a; 常见的数据库对象 表&#xff1a;基本的数据存储集合&#xff0c;由行和列组成&#xff1b; 视图&#xff1a;从表中抽出的逻辑上相关的数据集合&#xff1b; 序列&#xff1a;提供有规律的数值&…

阿里云服务器 之 mqtt服务器搭建及使用

本文主要是对mqtt的学习使用&#xff0c;其中服务器是基于阿里云服务器的mqtt功能&#xff0c;客户端使用的是mqttx软件。 一、服务器部分搭建说明 1、如果是首次使用&#xff0c;则需要经过注册与认证的步骤。 2、找到"产品与服务"-->"物联网平台"&…

spring笔记

spring 和 springboot的区别 自动配置原理 beanFactory接口和ApplicationContext接口 两个都是 IOC 容器 ApplicationContext接口是BeanFactory接口实现类的子类 功能&#xff1a; ApplicationContext扩展BeanFactory BeanFactoryApplicationContext控制反转国际化支持 …