CLion远程开发Ubuntu,并显示helloworld文字框

news2024/12/28 21:20:11

1.CLion的介绍以及其在远程开发上的优点

1)CLion 是一个由 JetBrains 开发的跨平台 C/C++ 集成开发环境(IDE),功能强大。

2)CLion的优点:

  1. 远程工具链支持:CLion 支持通过 SSH 连接到远程 Ubuntu 服务器,让开发者可以在本地机器上使用 IDE,而实际的编译和运行则在远程服务器上完成。

  2. 代码编辑和调试:在 CLion 中可以直接编辑远程服务器上的代码,并通过其强大的代码分析和重构工具提高开发效率。同时,CLion 还支持远程调试功能,可以在本地 IDE 中调试远程应用。

  3. CMake 项目支持:CLion 原生支持 CMake,这是许多 C/C++ 项目的构建工具。你可以轻松配置远程项目的构建环境,进行编译和生成。

  4. 版本控制集成:CLion 集成了 Git、SVN 等版本控制工具,方便开发者在远程项目中进行版本管理和协作。

  5. 智能补全和提示:CLion 提供的智能代码补全、代码导航和文档查看功能可以提高开发效率,即使是在远程开发的情况下。

  6. 终端和工具窗口:CLion 具备内置终端,可以方便地在 IDE 内使用命令行工具,与远程开发环境进行交互。

通过这些功能,使得CLion成为我们远程开发Linux的首选IDE。

2.所使用的Ubuntu介绍

本实验所使用的是加载了qt环境的14.0的乌班图版本,具体加载qt环境就不多描述,这里仅仅提供CLion远程开发的连接以及运行出helloworld文字框。

3.CLion远程开发连接步骤

     1)打开图片中的设置(Setting)

2)然后在构建、执行、部署中,进入工具链,后点击加号(我这里已经创建了,不做参考)

3)选择远程主机

4)在按照图中点击

5)点击加号后,会出现图中所示界面

6)这里的主机填虚拟机ifconfig后所示的IP地址

用户名与密码是登录入该乌班图界面的密码。配置好密码后,测试链接。

7)测试链接成功后,就是下图状态,还有如果CMake报错,显示远程开发cmake找不到,我这里是因为换了一个cmake-3.0.1,把之前的内容删除后填入cmake,就会自动检测,成功之后就可以继续使用了。

8)之后在部署里继续创建SFTP文件

9)此时可以通过下图的步骤选择之前已经链接好的SSH,测试。

10)测试成功后,进入映射

10)本地路径就是本机Windows所在的路径,而部署路径是在Linux里面,我们要编译和运行的文件都在处在部署路径里的Linux文件执行。

11)完成以上步骤之后,我们已经完成了80%的任务了,接下来就是打开CLion终端中的本地

注意:远程开发一定要在“本地”编译,我试了一下,在我图中的csgec@xxxxxxxx中找不到映射的文件

12)输入ssh [账号]@[主机ip],到这里我们的远程开发的连接板块已经完成,接下来的就是将minigui的开发文件helloworld通过CLion在ubuntu上进行上传并编译

4.helloworld界面编译

(最终形式)

1)首先创建一个helloworld.cpp文件(注意:我这里只创建了一个C++类),然后将一下代码复制

到该.cpp文件中。

注意:网上的helloworld远程开发的代码有一行多余的#include <minigui/mywindow.h>,我这里完全用不到,还给我报错,我直接删除了。

#include <stdio.h>
#include <string.h>
/*以上为包含标准库*/
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
/*以上为包含MiniGUI库*/
#define IDC_CTRL1 100   /*定义一个控件当然你也可以不需要它*/
int InitWindow(HWND hWnd); /*自定义一个窗口初始化函数,也可以不需要它而直接在消息处理中*/
/*进入消息循环中*/
static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    switch (message) {
        case MSG_CREATE:
/*当窗口创建时该消息产生,可以在这里尽心窗口初始化,比如添加控件*/
            InitWindow(hWnd);
            break;
        case MSG_PAINT:       /*当绘制窗口时该消息产生,您可以添加些绘图函数,“Hello world ”就是在这里实现。*/
            hdc = BeginPaint (hWnd);//得到绘图设备
            TextOut (hdc, 125, 50, "hell world");//输出字符
            EndPaint (hWnd, hdc);//结束绘图
            return 0;
        case MSG_CLOSE://当窗口关闭时该消息产生
            DestroyMainWindow (hWnd);//注销窗口
            PostQuitMessage (hWnd);
            return 0;
    }
    return DefaultMainWinProc(hWnd, message, wParam, lParam);//未处理的函数在此默认处理
}
int MiniGUIMain (int argc, const char* argv[])//main函数对应Windows的WinMain和c中main
{
    MSG Msg;//定义消息
    HWND hMainWnd;//生成主窗口句柄
    MAINWINCREATE CreateInfo;//定义主窗口结构
#ifdef _LITE_VERSION//预处理:判断是否Lite版本
    SetDesktopRect(0, 0, 1024, 768);
#endif
    CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;//设置主窗口风格
    CreateInfo.dwExStyle = WS_EX_NONE;//设置主窗口扩展风格
    CreateInfo.spCaption = "First App";//设置主窗口标题
    CreateInfo.hMenu = 0; //设置主窗口菜单
    CreateInfo.hCursor = GetSystemCursor(0); //设置主窗口鼠标光标
    CreateInfo.hIcon = 0; //设置主窗口图标
    CreateInfo.MainWindowProc = HelloWinProc; //设置主窗口消息处理函数过程
    CreateInfo.lx = 0; //设置主窗口位置x坐标
    CreateInfo.ty = 0; //设置主窗口位置y坐标
    CreateInfo.rx = 320; //设置主窗口宽度
    CreateInfo.by = 240; //设置主窗口高度
    CreateInfo.iBkColor = COLOR_lightwhite; //设置主窗口客户区背景色
    CreateInfo.dwAddData = 0; //设置主窗口的附加数据,通常不需要
    CreateInfo.hHosting = HWND_DESKTOP; //设置主窗口的托管窗口,通常为桌面DESKTOP

    hMainWnd = CreateMainWindow (&CreateInfo);//创建主窗口

    if (hMainWnd == HWND_INVALID)//失败则退出
        return -1;
    ShowWindow(hMainWnd, SW_SHOWNORMAL);//显示主窗口
    while (GetMessage(&Msg, hMainWnd)) {//进入消息处理
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    MainWindowThreadCleanup (hMainWnd);
    return 0;
}
int InitWindow(HWND hWnd)//自定义的初始化窗口函数,在MSG_CREATE处理中调用,
{
    static HWND hChildWnd1;//定义控件的窗口句柄,任何控件都是窗口
    hChildWnd1=CreateWindow("BUTTON","OK",WS_CHILD|WS_VISIBLE,IDC_CTRL1,200,180,40,25,hWnd,0);
//建立一个标题为“OK”的按钮
    return 0;
}
#ifndef _LITE_VERSION
#include <minigui/dti.c>
#endif

2)复制完之后,会出现由于没有相关的编译库而出现的红色警告,解决方法是复制完代码后点击进入CMakeLists.txt,并将下图中标红的代码部分进行复制或根据自己的创建情况进行微量改写。

注意:这里千万不能错,但凡有依赖库报错都可能是这个地方的问题,需要自己检查。

一下是该CMakeLists.txt代码源文件

cmake_minimum_required(VERSION 2.8 )
project(text5)

set(CMAKE_CXX_STANDARD 11)
set(MINIGUI_DIR /usr/local)

add_executable(text5 main.cpp)

include_directories(${MINIGUI_DIR}/include)
link_directories(${MINIGUI_DIR}/lib)

add_executable(helloworld helloworld.cpp)

find_package(Threads REQUIRED)

target_link_libraries(helloworld PRIVATE ${MINIGUI_DIR}/lib/libminigui.a ${CMAKE_THREAD_LIBS_INIT})

3)将两个文件都复制修改完成之后,把所有文件上传ubuntu,步骤如下,点击选择远程开发即可完成传输。

4)所有程序完成后,在本地的终端中用cd命令将地址转换到映射的地址里,(注意:这里如果用CLion虚拟机终端跳转不了

5)跳转之后敲【cmake ./ 】 会进入编译状态,一般这里不会出现问题。成功标志如下:

6)【cmake ./】之后,进行【make】,如果没有问题就没有error出现,如果有error大概率是CMakeLists.txt出现问题,此时检查CMakeLists.txt是否有误。

这个是我之前的错误,找了好久就是CMakeLists.txt编写时出现问题。

出现这样的颜色画面就代表【make】成功了。

此时【ls】后我们就有了helloworld的项目程序

7)在打开Ubuntu虚拟机的终端,敲下【qvfb】,这是打开窗口的界面。

8)打开窗口后,按下列箭头点击configure。

9)调整如下配置:

10)在CLion本地终端中继续刚才的操作,执行【./helloworld】指令,就可以看到Linux界面跳出helloworld界面辣!

总结:

           用CLion来配置环境是我们用windows编译Linux的一种方法,还有一种wsl编译(这个没有过多了解),但第二种方法没有CLion远程开发好,CLion还可以代码自动补齐。进行环境链接配置的时候真的一步都不能错,本人就是例子,希望这篇文章能帮助到大家。

相关需要的文件连接

1.cmake下载

(这个博主cmake下载的快,但版本低,这里可以支持)

Ubuntu安装CMake的完整指南_ubuntu cmake-CSDN博客

2.文章所使用的ubuntu

我的版本是14.04的安装好QT的版本的,文件有8.56个G,太大放不了百度网盘,嗯,下次冲会员再补上吧,没办法。

3.文章所用的helloworld文件

在文章里面有,这里就不放了。

希望能帮助到大家!

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

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

相关文章

Unity--AssestBundles--热更新

使用Node.js搭建AssestBundle服务器并验证AB包热更新 一、服务器部分 使用NodeJs作为服务器&#xff0c; 使用Express为基础网页模版。 当然&#xff0c; 使用其他的FTP&#xff0c;http服务器也可以&#xff0c; 基础逻辑是存放资源的位置。 1.下载Node.js 下载地址:https…

【Python】NumPy(二):数组运算、数据统计及切片索引、广播机制

目录 Numpy数组 数组的基本运算 乘法 加法 数组的数据统计 平均值 中位数 最大值和最小值 求和 累积和 标准差 方差 切片和索引 索引 一维数组的索引 二维数组的索引 获取多个元素 布尔索引 切片 一维数组切片 二维数组切片 多维数组切片 广播机制 规则 …

本地生活便民信息服务小程序源码系统 PHP+MySQL组合开发 带完整的安装代码包以及搭建部署教程

系统概述 地方门户分类信息网站源码系统是一个基于PHP和MySQL开发的强大平台&#xff0c;旨在帮助用户轻松搭建地方性的分类信息网站。该系统集成了众多实用功能&#xff0c;支持用户自由发帖、浏览和搜索各类信息&#xff0c;如二手交易、求职招聘、房屋租售、生活服务、商家…

【java】抽象类和接口(了解,进阶,到全部掌握)

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 大家好我们今天来学习Java面向对象的的抽象类和接口&#xff0c;我们大家庭已经来啦~ 一&#xff1a;抽象类 1.1:抽象类概念 在面向对象的概念中…

练习题(动态规划)

一&#xff0c;最长上升子序列2 题目&#xff1a; 思路分析&#xff1a; 之前的最长上升子序列的时间度是O(n^2)&#xff0c;同时集合划分是按以第 i - 1 个数是几来划分的&#xff0c;状态转移方程也很简单是 f[i] f[j] 1 &#xff0c;最后取所有一个max 那怎么优化呢&am…

ST7789读取ID错误新思路(以STC32G为例)

1.前言 前两天刚把ST7789写入搞定&#xff0c;这两天想折腾一下读取。最开始是读ID&#xff0c;先是用厂家送的程序&#xff0c;程序里面用的是模拟I8080协议&#xff0c;一切正常。后来我用STC32G的内置LCM模块&#xff0c;发现读取不出来。更神奇的是ID读不出来&#xff0c;…

【AIGC】AI如何匹配RAG知识库: Embedding实践,语义搜索

引言 RAG作为减少模型幻觉和让模型分析、回答私域相关知识最简单高效的方式&#xff0c;我们除了使用之外可以尝试了解其是如何实现的。在实现RAG的过程中Embedding是非常重要的手段。本文将带你简单地了解AI工具都是如何通过Embedding去完成语义分析匹配的。 Embedding技术简…

HTB:Headless[WriteUP]

目录 连接至HTB服务器并启动靶机 1.Which is the highest open TCP port on the target machine? 2.What is the title of the page that comes up if the site detects an attack in the contact support form? 使用浏览器访问靶机5000端口 3.What is the name of the …

海量数据在有限资源上处理的方法

1. 使用哈希 适用场景&#xff1a;需要处理的数据中&#xff0c;相同的数据可以分配到同样的机器/文件进行处理。 技巧总结&#xff1a;相同的数会哈希到同一个位置上 这类题目一般面试官给的描述都不是很清晰&#xff0c;需要自己去问条件、然后给出方案。 回答思路是&#…

hdfs的客户端(big data tools插件)

1.下载hadoop的压缩包在Windows,后解压 2.下载hadoop.dll文件和winutil.exe文件(网上自行查找) 下载完把这两个文件放入hadoop的bin目录 3.设置环境变量: $HADOOP_HOME指向hadoop的文件夹 4.在jetbrains公司的软件里下载big data tools插件:(在此展示的idea的) 下载完重启ide…

AI金融攻防赛:YOLO模型的数据增强与性能优化(DataWhale组队学习)

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月学习赛的AI金融攻防赛学习总结文档。在前一篇文章中&#xff0c;我们详细介绍了如何在金融场景凭证篡改检测中应用YOLO算法。本文将在此基础…

深入了解Spring重试组件spring-retry

在我们的项目中&#xff0c;为了提高程序的健壮性&#xff0c;很多时候都需要有重试机制进行兜底&#xff0c;最多就场景就比如调用远程的服务&#xff0c;调用中间件服务等&#xff0c;因为网络是不稳定的&#xff0c;所以在进行远程调用的时候偶尔会产生超时的异常&#xff0…

渗透测试实战—教育攻防演练中突破网络隔离

免责声明&#xff1a;文章来源于真实渗透测试&#xff0c;已获得授权&#xff0c;且关键信息已经打码处理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本…

3.matplotlib基础及用法(全)

一.基础绘图 折线图plot散点图scatter柱状图bar饼图pie 二.图表设置 设置标题设置线条设置坐标轴添加图例添加注释设置画布大小与分辨率 三.高级功能 绘制子图保存图形 一.基础绘图 1.折线图plot import matplotlib.pyplot as plt x [1, 2, 3, 4, 5] y [2, 3, 5, 7, 11] pl…

如何选择合适的电感器来匹配感性负载?

在匹配感性负载时&#xff0c;选择合适的电感器是至关重要的。电感器的主要作用是抑制电流变化&#xff0c;从而维持电路的稳定性。为了确保电路的稳定运行&#xff0c;需要考虑以下因素&#xff1a; 1. 电流和电压&#xff1a;首先&#xff0c;需要确定电感器的额定电流和额定…

GJS-WCP

不懂的就问&#xff0c;但我也是二把手......哭死 web GJS-ezssti 很常规的ssti模板注入&#xff0c;只过滤了"/","flag"。 过滤了/,flag 可以利用bash的特性绕过&#xff0c;如字符串截取&#xff0c;环境变量等等。payload1: {{url_for.__globals__[…

【uniapp】微信小程序使用echarts图表记录

1、插件引入 在Dcloud插件市场下载echarts插件&#xff1a;插件地址 或去相关代码库下载js&#xff1a;gitee地址 将static文件夹下中的echarts.min.js和ecStat.min.js复制到自己项目的static文件夹内或到echarts官方定制自己需要的图表类型下载js文件并放入相关目录。echart…

让你的 IDEA 使用更流畅 | IDEA内存修改

随着idea使用越来越频繁&#xff0c;笔者最近发现使用过程中有时候会出现卡顿现象&#xff0c;例如&#xff0c;启动软件变慢&#xff0c;打开项目的速度变慢等&#xff1a; 因此如果各位朋友觉得最近也遇到了同样的困惑&#xff0c;不妨跟着笔者一起来设置IDEA的内存大小吧~ …

【C#】在 WinForms 中使用 MVVM(Model-View-ViewModel) 设计模式

结合当前的 DevExpress 项目&#xff0c;在 WinForms 中使用 MVVM&#xff08;Model-View-ViewModel&#xff09; 设计模式。这个例子将通过数据绑定、命令绑定来展示 MVVM 模式的运用。 1. 项目结构 假设我们要实现一个简单的应用程序&#xff0c;它有一个文本框和一个按钮&…

【C++指南】类和对象(四):类的默认成员函数——全面剖析 : 拷贝构造函数

引言 拷贝构造函数是C中一个重要的特性&#xff0c;它允许一个对象通过另一个已创建好的同类型对象来初始化。 了解拷贝构造函数的概念、作用、特点、规则、默认行为以及如何自定义实现&#xff0c;对于编写健壮和高效的C程序至关重要。 C类和对象系列文章&#xff0c;可点击下…