使用VS Code通过SSH编译Linux上的C++程序的详细步骤

 更新时间:2025年05月16日 09:29:41   作者:天天进步2015  
在软件开发领域,跨平台开发是一项常见需求,特别是对于C++开发者来说,有时需要在Windows环境下编写代码,但却需要在Linux环境中编译和运行,VS Code提供了强大的远程开发功能,本文将详细介绍如何配置和使用VS Code的SSH远程开发功能,实现无缝的跨平台C++开发体验

引言

在软件开发领域,跨平台开发是一项常见需求。特别是对于C++开发者来说,有时需要在Windows环境下编写代码,但却需要在Linux环境中编译和运行。这种情况在系统编程、嵌入式开发或高性能计算领域尤为常见。

Visual Studio Code (VS Code) 提供了强大的远程开发功能,通过SSH扩展,开发者可以直接在本地VS Code界面中编辑、编译和调试远程Linux服务器上的C++代码。本文将详细介绍如何配置和使用VS Code的SSH远程开发功能,实现无缝的跨平台C++开发体验。

前提条件

在开始之前,请确保你已经具备以下条件:

  1. 本地Windows系统安装了VS Code
  2. 可访问的Linux服务器(物理机或虚拟机)
  3. Linux服务器上已安装SSH服务
  4. Linux服务器上已安装C++编译工具链(GCC/G++)
  5. 本地Windows系统安装了OpenSSH客户端

第一步:安装必要的VS Code扩展

首先,我们需要在VS Code中安装Remote Development扩展包:

  1. 打开VS Code
  2. 点击左侧边栏的扩展图标(或按下Ctrl+Shift+X
  3. 在搜索框中输入"Remote Development"
  4. 找到Microsoft发布的Remote Development扩展包并安装
  5. 或者直接安装其中的"Remote - SSH"扩展

第二步:配置SSH连接

安装完扩展后,我们需要配置SSH连接:

  1. 按下F1Ctrl+Shift+P打开命令面板
  2. 输入"Remote-SSH: Connect to Host…"并选择
  3. 选择"Add New SSH Host…"选项
  4. 输入SSH连接命令,格式为:ssh username@hostname_or_ip
    • 例如:ssh developer@192.168.1.100ssh developer@my-linux-server
  5. 选择配置文件保存位置(通常选择第一个选项,即用户配置文件)
  6. 连接成功后,VS Code会打开一个新窗口,连接到远程服务器

如果你需要使用SSH密钥进行身份验证,请确保已经正确设置了SSH密钥对。你可以使用以下命令生成SSH密钥:

ssh-keygen -t rsa -b 4096

然后使用以下命令将公钥复制到服务器:

ssh-copy-id username@hostname_or_ip

第三步:在远程服务器上安装C++开发工具

连接到远程服务器后,我们需要确保服务器上安装了必要的C++开发工具:

  • 在VS Code的远程窗口中,打开终端(Ctrl+

  • 根据Linux发行版,安装C++开发工具:

    • 对于Ubuntu/Debian系统:

sudo apt update
sudo apt install build-essential gdb cmake
  • 对于CentOS/RHEL系统:
sudo yum groupinstall "Development Tools"
sudo yum install gdb cmake
  • 对于Arch Linux系统:
sudo pacman -S base-devel gdb cmake

第四步:安装C++扩展到远程服务器

在远程VS Code窗口中,我们需要安装C++扩展:

  1. 点击左侧边栏的扩展图标
  2. 注意此时显示的是"远程服务器"的扩展列表
  3. 搜索"C++"并安装Microsoft的C/C++扩展
  4. 可选:安装CMake和CMake Tools扩展,如果你使用CMake构建系统

第五步:创建或打开C++项目

现在,我们可以在远程服务器上创建或打开C++项目:

  1. 在VS Code中,选择"文件 > 打开文件夹"
  2. 浏览并选择远程服务器上的项目文件夹
  3. 如果是新项目,可以创建新文件夹并添加C++源文件

下面是一个简单的C++项目结构示例:

my_project/
├── .vscode/
│   ├── c_cpp_properties.json
│   ├── launch.json
│   └── tasks.json
├── src/
│   ├── main.cpp
│   └── utils.cpp
├── include/
│   └── utils.h
├── CMakeLists.txt
└── README.md

第六步:配置C++项目

为了能够编译和调试C++代码,我们需要配置VS Code的任务和启动设置:

创建tasks.json(编译任务)

  1. 按下F1Ctrl+Shift+P打开命令面板
  2. 输入"Tasks: Configure Default Build Task"并选择
  3. 选择"Create tasks.json file from template"
  4. 选择"Others"创建自定义任务

将以下内容添加到.vscode/tasks.json文件中:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "g++",
            "args": [
                "-g",
                "${workspaceFolder}/src/*.cpp",
                "-I",
                "${workspaceFolder}/include",
                "-o",
                "${workspaceFolder}/bin/program"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": ["$gcc"]
        }
    ]
}

创建launch.json(调试配置)

  • 切换到调试视图(按下Ctrl+Shift+D
  • 点击"创建launch.json文件"
  • 选择"C++ (GDB/LLDB)"环境

将以下内容添加到.vscode/launch.json文件中:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++ - 构建和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/bin/program",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

创建c_cpp_properties.json(IntelliSense配置)

  1. 按下F1Ctrl+Shift+P打开命令面板
  2. 输入"C/C++: Edit Configurations (JSON)"并选择

将以下内容添加到.vscode/c_cpp_properties.json文件中:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "${workspaceFolder}/include"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/g++",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

第七步:编写C++代码

现在,让我们创建一个简单的C++程序:

  • include文件夹中创建utils.h
#ifndef UTILS_H
#define UTILS_H

#include <string>

std::string getGreeting(const std::string& name);

#endif // UTILS_H
  • src文件夹中创建utils.cpp
#include "../include/utils.h"

std::string getGreeting(const std::string& name) {
    return "Hello, " + name + "! Welcome to remote C++ development!";
}
  • src文件夹中创建main.cpp
#include <iostream>
#include "../include/utils.h"

int main() {
    std::string name;
    std::cout << "Enter your name: ";
    std::getline(std::cin, name);
    
    std::string greeting = getGreeting(name);
    std::cout << greeting << std::endl;
    
    return 0;
}

第八步:编译和运行C++程序

现在我们可以编译和运行我们的C++程序:

  • 确保远程服务器上存在bin目录(如果不存在,创建它):

mkdir -p bin
  • 按下Ctrl+Shift+B运行默认构建任务(我们在tasks.json中配置的任务)

  • 在终端中运行编译后的程序:

./bin/program

第九步:调试C++程序

VS Code提供了强大的调试功能:

  1. 在代码中设置断点(点击行号左侧)
  2. 按下F5开始调试
  3. 程序将在断点处暂停,你可以:
    • 查看变量值(悬停在变量上或使用变量面板)
    • 使用调试控制台执行表达式
    • 使用调试工具栏控制程序执行(继续、单步执行等)

第十步:使用CMake构建系统(可选)

对于更复杂的C++项目,推荐使用CMake构建系统:

  • 在项目根目录创建CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.10)
project(RemoteCppProject)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include_directories(include)

file(GLOB SOURCES "src/*.cpp")

add_executable(program ${SOURCES})
  1. 安装VS Code的CMake Tools扩展(在远程服务器上)

  2. 按下F1Ctrl+Shift+P打开命令面板,输入"CMake: Configure"并选择

  3. 选择编译器(通常是GCC)

  4. 使用CMake工具栏构建和运行项目

性能优化技巧

在使用VS Code进行远程C++开发时,以下是一些提高性能的技巧:

  • 使用SSH配置优化连接
    编辑~/.ssh/config文件,添加以下配置:

Host my-linux-server
    HostName 192.168.1.100
    User developer
    Compression yes
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h-%p
    ControlPersist 600
  • 使用工作区信任
    当VS Code提示是否信任工作区时,选择"信任"以启用所有功能。

  • 优化文件监视
    在远程服务器上,增加inotify限制:

echo "fs.inotify.max_user_watches=524288" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
  • 使用Git进行版本控制
    在远程服务器上初始化Git仓库,VS Code的Git集成将自动工作。

常见问题解决

连接问题

如果无法连接到远程服务器,请检查:

  • SSH服务是否在服务器上运行:
sudo systemctl status sshd
  • 防火墙是否允许SSH连接(通常是22端口):
sudo ufw status
# 如果需要,允许SSH连接
sudo ufw allow ssh
  1. 网络连接是否正常(可以使用ping测试)

编译问题

如果编译失败,请检查:

  1. 是否安装了所有必要的开发工具和库
  2. 编译命令是否正确
  3. 项目结构是否符合预期

调试问题

如果调试不工作,请检查:

  1. GDB是否正确安装
  2. launch.json中的路径是否正确
  3. 程序是否以调试模式编译(使用-g标志)

结论

通过VS Code的远程SSH功能,我们可以在Windows环境中无缝地开发、编译和调试Linux上的C++程序。这种开发模式结合了Windows桌面环境的便捷性和Linux系统的强大开发能力,特别适合需要在Linux环境中编译和运行的C++项目。

无论是系统编程、嵌入式开发还是高性能计算,这种远程开发方式都能显著提高开发效率,减少环境切换的成本。随着VS Code不断完善其远程开发功能,这种开发模式将变得越来越流畅和强大。

以上就是使用VS Code通过SSH编译Linux上的C++程序的流程步骤的详细内容,更多关于VS Code SSH编译C++程序的资料请关注脚本之家其它相关文章!

相关文章

  • Qt实现简易QQ聊天界面

    Qt实现简易QQ聊天界面

    这篇文章主要为大家详细介绍了Qt实现简易QQ聊天界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • C++单一职责原则示例代码浅析

    C++单一职责原则示例代码浅析

    我们在设计一个类时要学会发现职责,并把那些职责相互分离,其实要去判断是否应该分离出一个类来并不难,前面说过,一个类应该只有一个引起它变化的原因,如果你能想到其它的原因也能去改变这个类,那么这个类就具有多于1个的职责,就应该考虑类的职责分离
    2023-02-02
  • C 语言restrict 关键字的使用浅谈

    C 语言restrict 关键字的使用浅谈

    C 语言restrict 关键字的使用浅谈,需要的朋友可以参考一下
    2013-04-04
  • C++用一棵红黑树同时封装出set与map的实现代码

    C++用一棵红黑树同时封装出set与map的实现代码

    set中存储的一般为键K即可,而map存储的一般都是键值对KV,也就是说他们结构是不同的,那么我们如何才能用一颗红黑树同时封装出set与map两种容器呢,那么接下来我们具体地来研究下STL库中是怎样实现的,并且进行模拟实现,需要的朋友可以参考下
    2024-03-03
  • C++ OpenCV实现二维码检测功能

    C++ OpenCV实现二维码检测功能

    这篇文章主要介绍了如何利用C++ OpenCV实现二维码检测功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-01-01
  • C语言实现最简单的剪刀石头布小游戏示例

    C语言实现最简单的剪刀石头布小游戏示例

    这篇文章主要介绍了C语言实现最简单的剪刀石头布小游戏,涉及C语言数组、随机数与数值运算等相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • C语言数据结构实例讲解单链表的实现

    C语言数据结构实例讲解单链表的实现

    单链表是后面要学的双链表以及循环链表的基础,要想继续深入了解数据结构以及C++,我们就要奠定好这块基石!接下来就和我一起学习吧
    2022-03-03
  • EasyC++函数模板介绍

    EasyC++函数模板介绍

    这篇文章主要介绍了C++函数模板介绍,所谓函数的模板,本质上也就是使用泛型来定义函数,所谓的泛型其实也就是不定的类型,比如说我们使用vector的时候,可以定义各种类型的vector,下面我们一起进入文章详细了解一下C++函数模板,需要的朋友可以参考一下
    2021-12-12
  • C++实现打地鼠游戏设计

    C++实现打地鼠游戏设计

    这篇文章主要为大家详细介绍了C++实现打地鼠游戏设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • C语言学习之关键字的示例详解

    C语言学习之关键字的示例详解

    关键字,这名字一听,就很关键。而有些关键字,你可能不是很了解,更别谈使用。所以,这篇文章将带你见识常见的关键字,一起领略它们的风采吧
    2022-10-10

最新评论